Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
ВнизОттенки цветов... Найти похожие ветки
← →
ArtemESC © (2006-01-05 17:02) [0]Как мне получить оттенок цвета, который немного ярче
чем данный цвет?
← →
Anatoly Podgoretsky © (2006-01-05 17:13) [1]Умножить
← →
Джо © (2006-01-05 17:18) [2]Алгоритмы есть разные. Мне для моих задач подошел вот такой:
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;
← →
Джо © (2006-01-05 17:19) [3]П.С. Где взял, не помню.
← →
Игорь Шевченко © (2006-01-05 17:29) [4]
> Алгоритмы есть разные.
Это точно. Я в HLS переводил и L увеличивал, потом обратно в RGB
Вроде этого:
function THSColorManager.GetDarkerColorEx(Color: TColor;
PercentChange: Integer): TColor;
var
H, S, L, Percent: Double;
begin
RGBtoHSL (Color, H, S, L);
Percent := PercentChange / 100.0;
L := L - Percent;
if L <= 0 then
L := 0;
Result := HSLtoRGB (H, S, L);
end;
function THSColorManager.GetLighterColorEx(Color: TColor;
PercentChange: Integer): TColor;
var
H, S, L, Percent: Double;
begin
RGBtoHSL (Color, H, S, L);
Percent := PercentChange / 100.0;
L := L + Percent;
if L >= 1 then begin
S := S - (L - 1.0);
if S < 0 then
S := 0;
L := 1;
end;
Result := HSLtoRGB (H, S, L);
end;
← →
AlexWlad © (2006-01-05 17:30) [5]
> Джо © (05.01.06 17:18) [2]
Не совсем корректно. Надо переводить в HUE, там увеличивать яркость, а потом обратно. Тут на форумах проскакивали примеры - поищи.
← →
Джо © (2006-01-05 18:36) [6]AlexWlad ©
> Надо переводить в HUE, там увеличивать яркость, а потом
> обратно
См. "Алгоритмы есть разные". :)
Вот у Игоря, в общем, формально наиболее корректный. Однако, во многих случаях, достаточно и [2].
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.043 c