公式: Y = 0.30R + 0.59G + 0.11B // Y为亮度值这是电视机上的公式,不过我想在这里也应一样吧
不準確啊? windows色彩中的亮度有顯示出來,就是不知用什麼方式能取出來?
0.299*R + 0.587*G + 0.114*B (亮度)
用以下方法吧: 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;
Y = 0.30R + 0.59G + 0.11B // Y为亮度值这是电视机上的公式,不过我想在这里也应一样吧
windows色彩中的亮度有顯示出來,就是不知用什麼方式能取出來?
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;
ColorDialog1.Options:=[cdFullOpen];
你的代碼中:HLSMAX,RGBMAX,Undefined 是怎麼定義的.