Воскресенье, 19.05.2024, 18:14
Приветствую Вас Гость | RSS
delphicode.clan.su
Форма входа
Поиск
Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0
ИЗМЕНЕНИЕ СТАНДАРТНЫХ ЦВЕТОВ В DELPHI
  
 

Каждый из трёх основных цветов (Красный, Зелёный ,Синий) могут иметь значение от 0 до 255, соответственно скомбинировав их мы можем получить 16,777,216 возможных цветов. Визуально это можно представить как три оси куба, в котором направления x, y и z отвечают за цвета красный, зелёный и синий. В сочетании эти направления дают точку в кубе, представляющую один цвет из 16 миллионов. Точка куба, в которой значение равняется 0 (0,0,0) соответствует чёрному цвету, значение (255,255,255) - белому цвету, (255,0,0) - чисто красному, и т.д.

Если визуально провести линию между каким-либо цветом (r,g,b) и белым цветом (255,255,255), то получится, что на этой линии будут лежать все значения данного цвета (r,g,b). Если мы будем двигаться по линии в сторону белого цвета, то яркость будет увеличиваться до тех пор пока не получим чисто белый цвет.

То же самое можно сделать и для уменьшения яркости цвета. Достаточно провести линию из цвета (r,g,b) в чёрный (0,0,0). То есть при движении по линии к чёрному цвету мы будем уменьшать яркость до тех пор, пока не получим чёрный цвет.

Функция "Darker" возвращает новое значение цвета, которое будет на сколько-то процентов темнее. Естественно, что при 100% мы получим чёрный цвет. Функция "Lighter" возвращает цвет, который светлее на сколько-то процентов исходного. 100% - белый цвет.

 
 
Ниже рассмотрим примеры функций:
  
 
function Darker(Color:TColor; Percent:Byte):TColor;
var r, g, b: Byte; 
 begin 
 Color:=ColorToRGB(Color); 
 r:=GetRValue(Color); 
 g:=GetGValue(Color); 
 b:=GetBValue(Color); 
 r:=r-muldiv(r,Percent,100); //процент% уменьшения яркости 
 g:=g-muldiv(g,Percent,100); 
 b:=b-muldiv(b,Percent,100); 
 result:=RGB(r,g,b); 
end; 
  
 
function Lighter(Color:TColor; Percent:Byte):TColor; 
var r, g, b: Byte; 
 begin 
 Color:=ColorToRGB(Color); 
 r:=GetRValue(Color); 
 g:=GetGValue(Color); 
 b:=GetBValue(Color); 
 r:=r+muldiv(255-r,Percent,100); //процент% увеличения яркости 
 g:=g+muldiv(255-g,Percent,100); 
 b:=b+muldiv(255-b,Percent,100); 
 result:=RGB(r,g,b); 
end; 
 
 Пример использования:
 
Panel1.Color := Darker(clBlue,20);
{Получится панель, которая на 20% темнее обычного синего цвета}
 Panel1.Color := Lighter(clRed,80);
 
Источник Delphi World