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

Затемнить или осветлить цвет

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

Затемнить или осветлить цвет

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

// Takes a TColor and returns either the lighter or darker color, depending on 
// the supplied integer (percentage of original to add or subtract) 
// I don't know if this is 100% correct - I did it away from my computer. 

function TMainForm.ChangeColor(InputColor: TColor; Lighten: Boolean; n: Extended): TColor;
 var
   r,g,b: extended;
 begin
   // Grab RGB values 
  r := GetRValue(InputColor);
   g := GetGValue(InputColor);
   b := GetBValue(InputColor);
   // Do the operation 
  if Lighten = True then
   begin
     r := r+((r/255)*100);
     g := g+((g/255)*100);
     b := b+((b/255)*100);
   end else
   begin
     r := r-((r/255)*100);
     g := g-((g/255)*100);
     b := b-((b/255)*100);
   end;
   // Check whether result is in range 
  if r > 255 then r := 255;
   if r < 0 then r := 0;
   if g > 255 then g := 255;
   if g < 0 then g := 0;
   if b > 255 then b := 255;
   if b < 0 then b := 0;
   // Send it out 
  Result := RGB(byte(Round(r)),byte(Round(g)),byte(Round(b)));
 end;

Функция ChangeColor принимает три параметра:

  1. InputColor: значение типа TColor, представляющее исходный цвет.
  2. Lighten: булевое значение, указывающее, нужно ли светлить или темнить цвет (true для светления, false для темнения).
  3. n: целочисленное значение, представляющее процент оригинального цвета, который нужно добавить или вычесть.

Функция возвращает результативное значение типа TColor после применения запрошенной операции.

Схема работы функции следующая:

  1. Извлекаются RGB-значения из входного цвета с помощью GetRValue, GetGValue и GetBValue.
  2. Если Lighten истинно, то к каждому RGB-компоненту добавляется рассчитанный процент; в противном случае, от него вычитается.
  3. Расчет использует простую линейную интерполяцию: (component / 255) * 100. Это означает, что если n равно 50, например, функция будет добавлять или вычитать половину изначального значения компонента.
  4. После применения операции код проверяет, превышает ли каждый RGB-компонент диапазон [0, 255]. Если это так, то значение обрезается до ближайшего границы (например, если r больше 255, то устанавливается в 255).
  5. Наконец, функция возвращает результативное значение типа TColor, создавая новый цвет с округленными RGB-значениями с помощью RGB.

Обратите внимание:

  • Расчет (component / 255) * 100 может не быть точным, поскольку он предполагает линейную связь между процентом и изначальным значением. Для более точного результата можно использовать нелинейную интерполяцию или алгоритм поиска соответствия цветов.
  • Функция не обрабатывает краевые случаи, когда n находится вне диапазона [0, 100]. Возможно, вам нужно добавить валидацию входных данных для этого случая.

В целом, код прост и легко понятен. Хорошая работа, DeeCo!

Функция ChangeColor позволяет изменять цвет, выбрав между затемнением или осветлением цвета с помощью заданного процентного значения.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 03:30:03/0.0033378601074219/0