|
|
|
|
Как
сделать стандартные цвета в 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% - белый
цвет.
Функции Darker и Lighter требуют 2 параметра и используются
примерно так: Panel1.Color := Darker(clBlue,20); Получется панель
цветов, которая на 20% темнее обычного синего цвета.
Теперь давайте
посмотрим, как выглядят внутри наши функции:
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 := Light(clBlue); Panel1.Color := SlightlyDark(clRed); Panel1.Color := VeryLight(clMagenta); etc.
function SlightlyDark(Color:TColor):TColor; begin Result := Darker(Color,25); end;
function Dark(Color:TColor):TColor; begin Result := Darker(Color,50); end;
function VeryDark(Color:TColor):TColor; begin Result := Darker(Color,75); end;
function SlightlyLight(Color:TColor):TColor; begin Result := Lighter(Color,25); end;
function Light(Color:TColor):TColor; begin Result := Lighter(Color,50); end;
function VeryLight(Color:TColor):TColor; begin Result := Lighter(Color,75); end;
Автор:
Den Bedard
|
Copyright ©
"Мастера DELPHI" E-mail:
delphi@mastak.com
http://www.delphimaster.ru |
Источник получения информации: http://www.delphimaster.ru
|
|