不是很明白题意$xx:xx:xx:xx第一字节是 windows 使用, 1 是用色板最接近显 0 是不对 color 作任何形式的转换直接显示, 有时我在想这样的设置是否有效,在色板中没有的色素如何显示,一定要有一种形式上的转换 最有效的灰度算法就是在 R, G, B 三色上减一个百分比,这样还能保持原色彩 比方 R := R * 0.75 G := G * 0.75 B := B * 0.75function GaryColor(Color :TColor; Value :Byte = 210) :TColor; var R, G, B :Byte; begin R := (Color and $000000FF); G := (Color and $0000FF00) Shr 8; B := (Color and $00FF0000) Shr 16; R := R - Round(R * (Value / 255)); G := G - Round(G * (Value / 255)); B := B - Round(B * (Value / 255)); Result := RGB(R, G, B); end;最有效的 Hightlight 算法就是在R, G, B 三色上加一个相对纯色百分比function HighlightColor(Color :TColor; Value :Byte = 210) :TColor; var R, G, B :Byte; begin R := (Color and $000000FF); G := (Color and $0000FF00) Shr 8; B := (Color and $00FF0000) Shr 16; R := R + Round((255 - R) * (Value / 255)); G := G + Round((255 - G) * (Value / 255)); B := B + Round((255 - B) * (Value / 255)); Result := RGB(R, G, B); end;
例如 c:=$04030201
一种算法:(04+03+02+01) div 4 = 2
然后转换后的颜色 cc:= $02020202但是我认为颜色是RGB,只有030202才有效
应该是:(03+02+01) div 3 = 2;
cc:=$04020202
最前面一位保留希望高手能给个解释
grayvalue:=0.3*rvalue+0.3*gvalue+0.3*bvalue;
第二种是取平均值
grayvalue:=integer((rvalue+bvalue+gvalue)/3)
如果tcolor值用4个字节的十六进制数表示,则第2,3,4个字节分别为蓝、绿、红的分量。
1 是用色板最接近显
0 是不对 color 作任何形式的转换直接显示, 有时我在想这样的设置是否有效,在色板中没有的色素如何显示,一定要有一种形式上的转换
最有效的灰度算法就是在 R, G, B 三色上减一个百分比,这样还能保持原色彩
比方
R := R * 0.75
G := G * 0.75
B := B * 0.75function GaryColor(Color :TColor; Value :Byte = 210) :TColor;
var
R, G, B :Byte;
begin
R := (Color and $000000FF);
G := (Color and $0000FF00) Shr 8;
B := (Color and $00FF0000) Shr 16; R := R - Round(R * (Value / 255));
G := G - Round(G * (Value / 255));
B := B - Round(B * (Value / 255)); Result := RGB(R, G, B);
end;最有效的 Hightlight 算法就是在R, G, B 三色上加一个相对纯色百分比function HighlightColor(Color :TColor; Value :Byte = 210) :TColor;
var
R, G, B :Byte;
begin
R := (Color and $000000FF);
G := (Color and $0000FF00) Shr 8;
B := (Color and $00FF0000) Shr 16; R := R + Round((255 - R) * (Value / 255));
G := G + Round((255 - G) * (Value / 255));
B := B + Round((255 - B) * (Value / 255)); Result := RGB(R, G, B);
end;
Red*0.3+Green*0.59+Blue*0.11
(Red*3+Green*6+Blue*1)/10
都可!主要是可以减少浮点运算的次数!
写错了