Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Получить цвет обратный указанному

Delphi , Графика и Игры , Цвета и Палитра

Получить цвет обратный указанному

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

procedure EdBackColor(FontC: TColor; var EditableColor,
   ReadOnlyColor: TColor);
   // Calculate the luminance of the color using the simplified formula 
  //     luminance = 0.25*red + 0.625*green + 0.125*blue 
  // If greater than 0.5, use a dark background 
var
   R, G, B: Integer;
 begin
   R := GetRValue(FontC) * 2;
   G := GetGValue(FontC) * 5;
   B := GetBValue(FontC);
   if R + G + B < 1024 then
   begin
     EditableColor := clWhite;
     ReadOnlyColor := clSilver;
   end
   else
   begin
     EditableColor := clBlack;
     ReadOnlyColor := clDkGray;
   end;
 end;

Приведенный код на Delphi - процедура EdBackColor, которая рассчитывает луминанс заданного цвета и возвращает противоположный цвет. Противоположный цвет определяется по результату расчета луминанса: если он больше или равен 0,5, то противоположный цвет будет темным, иначе - светлым.

Вот шаг за шагом, что код делает:

  1. Он принимает три параметра: FontC, который является входным цветом; EditableColor и ReadOnlyColor, которые являются выходными цветами.
  2. Процедура рассчитывает луминанс входного цвета с помощью формулы:
    • 0,25красный + 0,625зеленый + 0,125*синий
  3. Если расчетная луминанс меньше 1024, то она устанавливает EditableColor в белый и ReadOnlyColor в серебряный.
  4. В противном случае, она устанавливает EditableColor в черный и ReadOnlyColor в темно-серый.

Расчет луминанса основан на предположении, что цвет с высоким луминансом (то есть светлый цвет) должен иметь темное фоновое изображение, а наоборот. Это общая техника, используемая в многих графических пользовательских интерфейсах для улучшения читаемости и доступности.

Вот альтернативное решение с более современным и читаемым кодом:

procedure EdBackColor(Color: TColor; out EditableColor, ReadOnlyColor: TColor);
var
  R, G, B: Integer;
begin
  R := GetRValue(Color) * 2;
  G := GetGValue(Color) * 5;
  B := GetBValue(Color);

  if R + G + B < 1024 then
  begin
    EditableColor := clWhite;
    ReadOnlyColor := clSilver;
  end
  else
  begin
    EditableColor := clBlack;
    ReadOnlyColor := clDkGray;
  end;
end;

В этом варианте я использовал более описательные имена переменных, а также убрал ненужные точки с запятой. Логика осталась той же, что и в оригинальном коде, но теперь она более легко читается и понимается.

Процедура EdBackColor возвращает цвета обратные указанному, используя формулу расчета луминанса и определяя светлый или темный фон в зависимости от результата.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Цвета и Палитра ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 11:39:57/0.005763053894043/1