Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поделитесь функцией HSV to RGB на Паскале ?


Драйвер ©   (2007-05-06 01:56:00) 

А то описаний много, а самой функции не найду никак.


Макс2   (2007-05-14 03:12:00) [1]

Это и без тебя знают.
Если не знаешь ответа - так и скажи.


Belorus   (2007-05-13 20:30:00) [2]

HSV и HLS - не цвета.


Макс2   (2007-05-12 02:55:00) [3]

Чем эти два цвета отличаются?
HSV и HLS?


TStas   (2007-05-07 18:39:00) [4]

Я как-то делал через тип вспомогательный
type THelpType = Array[1..4] of byte; PHelpType = ^THelpType;
PColor = ^TColor;
Ну и указатели присваивал. Они, вроде и получалить 1 - красный, 2-зеленый, 3 - синий //Но вроде


Fredy314   (2007-05-07 09:41:00) [5]

а ето разве не одно и тоже?


Драйвер   (2007-05-07 01:24:00) [6]


> Vovan # 2   (07.05.07 00:35) [5]
>
> Так вы ж дали код для HSL, а просили для HSV.


Точно! А то смотрю, что-то не то. :)

Ссылку посмотрю.


Vovan # 2   (2007-05-07 00:35:00) [7]

Так вы ж дали код для HSL, а просили для HSV.
http://www.efg2.com/Lab/Graphics/Colors/HSV.htm


Fredy314   (2007-05-06 19:02:00) [8]

> Мне нужно не RGBtoHLS, а наоборот.

Так здесь обе


MBo   (2007-05-06 07:37:00) [9]

В модуль GraphUtil заглядывал?


Драйвер   (2007-05-06 02:22:00) [10]

Мне нужно не RGBtoHLS, а наоборот.


Fredy314   (2007-05-06 02:14:00) [11]

вот тебе куски кода из одной моей очень старой проги, разберёшся?

Procedure TAppForm.RGBtoHLS;
Var
 mn, mx, j: Integer;
 RR, GG, BB: Integer;
 LL, S1, HH: Real;
Begin
 RR := R.Position;
 GG := G.Position;
 BB := B.Position;
 If RR < GG Then
   Begin mn := RR;
     mx := GG;
     j := GG;
   End
 Else
   Begin mn := GG;
     mx := RR;
     j := RR;
   End;
 If BB < mn Then
   mn := BB
 Else
   If BB > mx Then
     Begin mx := BB;
       j := BB;
     End;
 If mn = mx Then
   Begin LL := mn / 255;
     S1 := 0;
     HH := 0;
   End
 Else
   Begin
     LL := (mn + mx) / 510;
     If LL <= 0.5 Then
       S1 := (mx - mn) / (mn + mx)
     Else
       S1 := (mx - mn) / (510 - mn - mx);
     If J = RR Then HH := (GG - BB) * 60 / (mx - mn) + 360;
     If J = GG Then HH := (BB - RR) * 60 / (mx - mn) + 120;
     If J = BB Then HH := (RR - GG) * 60 / (mx - mn) + 240;
     While HH >= 360 Do
       HH := HH - 360;
   End;
 H.Position := Round(HH);
 S.Position := Round(S1 * 255);
 V.Position := Round(LL * 255);
 {V.Position:=Round((0.30 * R.Position) +
                   (0.59 * G.Position) +
                   (0.11 * B.Position));}
 sR.Caption := 'R:$' + IntToHex(R.Position, 2) + '(' + IntToStr(R.Position) + ')';
 sG.Caption := 'G:$' + IntToHex(G.Position, 2) + '(' + IntToStr(G.Position) + ')';
 sB.Caption := 'B:$' + IntToHex(B.Position, 2) + '(' + IntToStr(B.Position) + ')';
 sV.Caption := 'L:$' + IntToHex(V.Position, 2) + '(' + IntToStr(V.Position) + ')';
 sH.Caption := 'H:$' + IntToHex(H.Position, 2) + '(' + IntToStr(H.Position) + ')';
 sS.Caption := 'S:$' + IntToHex(S.Position, 2) + '(' + IntToStr(S.Position) + ')';
 P.Color := RGB(R.Position, G.Position, B.Position);
End;

Procedure TAppForm.HLStoRGB;

Function VL(m1, m2, H: Real): Byte;
 Var
   m: Real;
 Begin
   If H >= 360 Then H := H - 360;
   If H < 0 Then H := H + 360;
   If H < 60 Then
     m := m1 + (m2 - m1) * H / 60
   Else
     If H < 180 Then
       m := m2
     Else
       If H < 240 Then m := m1 + (m2 - m1) * (240 - H) / 60;
   VL := Round(m * 255);
 End;
Var
 S1, HH, LL, m1, m2: Real;
Begin
 LL := V.Position / 255;
 S1 := S.Position / 255;
 HH := H.Position;
 If S.Position = 0 Then
   Begin
     R.Position := V.Position;
     G.Position := V.Position;
     B.Position := V.Position;
   End
 Else
   Begin
     If LL <= 0.5 Then
       m2 := LL + LL * S1
     Else
       m2 := LL + S1 - LL * S1;
     m1 := 2 * LL - m2;
     R.Position := VL(m1, m2, HH + 120);
     G.Position := VL(m1, m2, HH);
     B.Position := VL(m1, m2, HH - 120);
   End;

 {R.Position:=Round(V.Position/0.30);
 G.Position:=Round(V.Position/0.59);
 B.Position:=Round(V.Position/0.11);}
 sR.Caption := 'R:$' + IntToHex(R.Position, 2) + '(' + IntToStr(R.Position) + ')';
 sG.Caption := 'G:$' + IntToHex(G.Position, 2) + '(' + IntToStr(G.Position) + ')';
 sB.Caption := 'B:$' + IntToHex(B.Position, 2) + '(' + IntToStr(B.Position) + ')';
 sV.Caption := 'L:$' + IntToHex(V.Position, 2) + '(' + IntToStr(V.Position) + ')';
 sH.Caption := 'H:$' + IntToHex(H.Position, 2) + '(' + IntToStr(H.Position) + ')';
 sS.Caption := 'S:$' + IntToHex(S.Position, 2) + '(' + IntToStr(S.Position) + ')';
 P.Color := RGB(R.Position, G.Position, B.Position);
End;


Наверх

Титульная страница Поиск, карта сайта Написать письмо