【发布时间】:2012-01-19 19:06:26
【问题描述】:
目前,我循环 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 张图像是我需要它的第一步。但是,我也将在我们的软件中使用相同的东西来根据需要在现场自动转换任何图像。所以第三方转换器无法工作,因为我无法将其分发给我们的客户。
【问题讨论】:
标签: delphi colors pixel scanline