目前,我循环Canvas.Pixels[]
属性并读取画布上的每个像素以交换红色/蓝色字节(出于特定原因)。但是,每张图片平均需要 2 秒,而且我需要转换 8,000 多张图片(一夜之间)。我知道我可以使用一种方法ScanLine
来更快地完成这项工作,但我对此一无所知ScanLine
- 它的编码水平比我熟悉的要低得多。最快的方法是什么?我愿意等待一段时间来完成,但如果我能把这段时间切成两半或更多,那还是很好的。
现在,这是我使用的程序:
procedure SwapBytes(var Bmp: TBitmap);
var
X, Y: Integer;
R, G, B: Byte;
C: TColor;
begin
for Y := 0 to Bmp.Height - 1 do begin
for X := 0 to Bmp.Width - 1 do begin
C:= Bmp.Canvas.Pixels[X,Y];
R:= GetRValue(C);
G:= GetGValue(C);
B:= GetBValue(C);
Bmp.Canvas.Pixels[X,Y]:= RGB(B, G, R)
end;
end;
end;
补充说明:超过 8,000 张图像的初始转换是我需要它的第一步。但是,我也将在我们的软件中使用相同的东西来根据需要在现场自动转换任何图像。所以第三方转换器不起作用,因为我无法将其分发给我们的客户。