先记录,等后面详细
参考CnVcl代码
先填充一个灰度处理数组
for i := 0 to 85 do
begin
Grays[x + 0] := y; // Grays[i] := i div 3
Grays[x + 1] := y;
Grays[x + 2] := y;
Inc(y);
Inc(x, 3);
end;
这个数组3位为一组,值为1-85,共255字节
然后再用下面的方法,重新设置r、g、b颜色值即可
for y := 0 to FHeight - 1 do
begin
for x := 0 to FWidth - 1 do
begin // Gray := (r + g + b) div 3
i := Grays[CurBits.b] + Grays[CurBits.g] + Grays[CurBits.r];
CurBits.b := i;
CurBits.g := i;
CurBits.r := i;
Inc(CurBits);
end;
CurBits := Pointer(Integer(CurBits) + Gap);
end;