スキャンラインを使用して赤/青のバイトを交換する速い方法
質問
現在、私はループします 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を超える画像の初期変換が、これが必要な理由の最初のステップです。ただし、必要に応じて、ソフトウェアで同じものを使用して、その場の画像を自動的に変換することもできます。そのため、クライアントにこれを配布できないため、サードパーティのコンバーターは機能しません。
正しい解決策はありません
所属していません StackOverflow