現在、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 を超える画像の最初の変換は、これが必要な理由の最初のステップです。ただし、必要に応じて、ソフトウェアで同じことを使用して、その場で画像を自動的に変換します。したがって、これをクライアントに配布できないため、サードパーティのコンバーターは機能しません。