Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Alexey Tomin                         2:5020/400     14 Mar 2003  16:10:23
 To : All
 Subject : RGB -> HSL - где ошибка?
 -------------------------------------------------------------------------------- 
 
 День добрый!
 
 Взял из журнала какого-то код для преобразования RGB в HSL.
 Работает хорошо, кроме случай R=255, B>>0, G=0 (см. коментарий).
 
 Где подправить надо?
 
 procedure RGBtoHSL(R,G,B: byte; out H,S,L: byte);
   var
     CMax, CMin: Integer;
     RD, GD, BD: Integer;
     CDiff, CDiffD2, CSum, CSumD2: Integer;
 begin
   CMin := Min( R, Min( G, B ));
   CMax := Max( R, Max( G, B ));
   L := (((CMax + CMin) * HSLMax) + RGBMax) div RGBMaxM2;
   if CMax = CMin then begin
     S := 0;
     H := Undefined;
    end else begin
     CDiff := CMax - CMin;
     CDiffD2 := CDiff div 2;
     CSum := CMax + CMin;
     CSumD2 := CSum div 2;
     if L <= HSLMaxD2 then
       S := (CDiff * HSLMax + CSumD2) div CSum
      else
       S := (CDiff * HSLMax + (RGBMaxM2-cDiff) div 2) div (RGBMaxM2-CDiff);
     RD := ((CMax - R) * HSLMaxD6 + CDiffD2) div CDiff;
     GD := ((CMax - G) * HSLMaxD6 + CDiffD2) div CDiff;
     BD := ((CMax - B) * HSLMaxD6 + CDiffD2) div CDiff;
     if R = CMax then
       H := BD - GD // ### Здесь ошибка - BD=0, GD=40
      else
       if G = CMax then
         H := HSLMaxD3 + RD - BD
        else
         H := HSLMaxM2D3 + GD - RD;
     CheckRange( H );
   end;
 end;
 
 --
   Алексей.
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 RGB -> HSL - где ошибка?   Alexey Tomin   14 Mar 2003 16:10:23 
Архивное /ru.algorithms/34859b7bb3b.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional