用以下方法吧: H,L,S分別為:亮度,濃度,色調
procedure RGB2HLS(R, G, B: Word; var H, L, S: Word);
var cMax,cMin : Word;
Rdelta,Gdelta,Bdelta : WORD;
HH : integer;
begin
cMax := Max(Max(R,G) , B);
cMin := Min(Min(R,G) , B);
L := ((cMax+cMin)*HLSMAX + RGBMAX) div (RGBMAX + RGBMAX);
if cMax = cMin then
begin
H := UnDefined;
S := 0;
end else begin
if (L <= HLSMAX div 2) then
S := (((cMax-cMin)*HLSMAX) + ((cMax+cMin) div 2)) div (cMax+cMin)
else
S := (((cMax-cMin)*HLSMAX) + ((RGBMAX+RGBMAX-cMax-cMin) div 2))
div (RGBMAX+RGBMAX-cMax-cMin);
Rdelta := (((cMax-R)*(HLSMAX div 6)) + ((cMax-cMin) div 2) ) div (cMax-cMin);
Gdelta := (((cMax-G)*(HLSMAX div 6)) + ((cMax-cMin) div 2) ) div (cMax-cMin);
Bdelta := (((cMax-B)*(HLSMAX div 6)) + ((cMax-cMin) div 2) ) div (cMax-cMin);
if (R = cMax) then
HH := Bdelta - Gdelta
else if (G = cMax) then
HH := (HLSMAX div 3) + Rdelta - Bdelta
else
HH := ((HLSMAX+HLSMAX) div 3) + Gdelta - Rdelta;
if (HH < 0) then
HH := HH + HLSMAX;
if (HH > HLSMAX) then
HH := HH - HLSMAX;
H := HH;
end;
end;