Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2007, 21:27   #1
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию цвета, оттенок и контраст

всем привет!!
подскажите как настроить мне оттенок и контраст программно, с RGB я разобрался, а вот применить к цвету оттенок и контраст немогу.
заранее спасибо
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 13.09.2007, 02:59   #2
Rapid
Форумчанин
 
Аватар для Rapid
 
Регистрация: 01.09.2007
Сообщений: 747
По умолчанию

По моему проблемы здесь нет, ведь контраст и оттенок это производные свойства от соотношения трех базовых цветов.
Контраст например выражает чистоту основного цвета. Значит чтобы поменять эти свойства нужно просто поменять РГБ.
Никому не верьте.
Rapid вне форума Ответить с цитированием
Старый 13.09.2007, 09:53   #3
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

Цитата:
Сообщение от Rapid Посмотреть сообщение
По моему проблемы здесь нет, ведь контраст и оттенок это производные свойства от соотношения трех базовых цветов.
Контраст например выражает чистоту основного цвета. Значит чтобы поменять эти свойства нужно просто поменять РГБ.
Это я понял, но в какую сторону и в каком соотношении поменять цвета мне непонятно, если можно поподробнее или еще лучше пример.
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 13.09.2007, 10:48   #4
Pitbull
детский тренер
Форумчанин
 
Аватар для Pitbull
 
Регистрация: 08.06.2007
Сообщений: 532
По умолчанию

Цитата:
Сообщение от Toxa Посмотреть сообщение
Это я понял, но в какую сторону и в каком соотношении поменять цвета мне непонятно, если можно поподробнее или еще лучше пример.
запусти Fotoshop и в нем вібери нужній тебе цвет в палитре цветов.... И скопируй буквенное значение цвета....
Я злой и страФный серррый воФк, и в пАрАсятах знаю толк - ppp ppp pp p pp pp
Pitbull вне форума Ответить с цитированием
Старый 13.09.2007, 11:15   #5
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

Цитата:
Сообщение от Pitbull Посмотреть сообщение
запусти Fotoshop и в нем вібери нужній тебе цвет в палитре цветов.... И скопируй буквенное значение цвета....
мне надо привязатся к трекбару, и при движении ползунка изменять оттенок или контраст, короче говоря мне надо добавить в программу возможность менять оттенок с помощью трекбара и контраст с помощью другого трекбара
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 13.09.2007, 12:04   #6
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
По умолчанию

Преобразование цвета RGB to HLS
{ Максимальные значения }
Const
HLSMAX = 240;
RGBMAX = 255;
UNDEFINED = (HLSMAX*2) div 3;
Var
H, L, S : integer; { H-оттенок, L-яркость, S-насыщенность }
R, G, B : integer; { цвета }
procedure RGBtoHLS;
Var
cMax,cMin : integer;
Rdelta,Gdelta,Bdelta : single;
Begin
cMax := max( max(R,G), B);
cMin := min( min(R,G), B);
L := round( ( ((cMax+cMin)*HLSMAX) + RGBMAX )/(2*RGBMAX) );
if (cMax = cMin) then begin
S := 0; H := UNDEFINED;
end else begin
if (L <= (HLSMAX/2)) then
S := round( ( ((cMax-cMin)*HLSMAX) + ((cMax+cMin)/2) ) / (cMax+cMin) )
else
S := round( ( ((cMax-cMin)*HLSMAX) + ((2*RGBMAX-cMax-cMin)/2) )
/ (2*RGBMAX-cMax-cMin) );
Rdelta := ( ((cMax-R)*(HLSMAX/6)) + ((cMax-cMin)/2) ) / (cMax-cMin);
Gdelta := ( ((cMax-G)*(HLSMAX/6)) + ((cMax-cMin)/2) ) / (cMax-cMin);
Bdelta := ( ((cMax-B)*(HLSMAX/6)) + ((cMax-cMin)/2) ) / (cMax-cMin);
if (R = cMax) then H := round(Bdelta - Gdelta)
else if (G = cMax) then H := round( (HLSMAX/3) + Rdelta - Bdelta)
else H := round( ((2*HLSMAX)/3) + Gdelta - Rdelta );
if (H < 0) then H:=H + HLSMAX;
if (H > HLSMAX) then H:= H - HLSMAX;
end;
if S<0 then S:=0; if S>HLSMAX then S:=HLSMAX;
if L<0 then L:=0; if L>HLSMAX then L:=HLSMAX;
end;

procedure HLStoRGB;
Var
Magic1,Magic2 : single;
function HueToRGB(n1,n2,hue : single) : single;
begin
if (hue < 0) then hue := hue+HLSMAX;
if (hue > HLSMAX) then hue:=hue -HLSMAX;
if (hue < (HLSMAX/6)) then
result:= ( n1 + (((n2-n1)*hue+(HLSMAX/12))/(HLSMAX/6)) )
else
if (hue < (HLSMAX/2)) then result:=n2 else
if (hue < ((HLSMAX*2)/3)) then
result:= ( n1 + (((n2-n1)*(((HLSMAX*2)/3)-hue)+(HLSMAX/12))/(HLSMAX/6)))
else result:= ( n1 );
end;
begin
if (S = 0) then begin
B:=round( (L*RGBMAX)/HLSMAX ); R:=B; G:=B;
end else begin
if (L <= (HLSMAX/2)) then Magic2 := (L*(HLSMAX + S) + (HLSMAX/2))/HLSMAX
else Magic2 := L + S - ((L*S) + (HLSMAX/2))/HLSMAX;
Magic1 := 2*L-Magic2;
R := round( (HueToRGB(Magic1,Magic2,H+(HLSMAX/3))*RGBMAX + (HLSMAX/2))/HLSMAX );
G := round( (HueToRGB(Magic1,Magic2,H)*RGBMAX + (HLSMAX/2)) / HLSMAX );
B := round( (HueToRGB(Magic1,Magic2,H-(HLSMAX/3))*RGBMAX + (HLSMAX/2))/HLSMAX );
end;
if R<0 then R:=0; if R>RGBMAX then R:=RGBMAX;
if G<0 then G:=0; if G>RGBMAX then G:=RGBMAX;
if B<0 then B:=0; if B>RGBMAX then B:=RGBMAX;
end;
Until The End Of Time
Showy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инверсия цвета Dj_smart Общие вопросы Delphi 6 08.05.2008 16:29
DBGrid цвета Steel_rat БД в Delphi 9 01.02.2008 11:06
Формат цвета xTANATOSx Общие вопросы Delphi 14 02.11.2007 20:22
Изменение цвета Artem Общие вопросы Delphi 5 12.07.2007 09:07
цвета Toxa Общие вопросы Delphi 3 20.04.2007 12:03