現在、Canvas.Pixels[]
プロパティをループし、キャンバス上の各ピクセルを読み取って赤/青のバイトをスワップします(特定の理由により)。しかし、1枚の画像に平均2秒かかり、変換に必要な画像は8,000枚を超える(一晩)。私はScanLine
の方法を使ってこれをはるかに高速にすることができると理解していますが、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以上の画像の最初の変換は、私はこれを必要とする理由の最初のステップです。しかし私は、私たちのソフトウェアで同じことを使用して、必要に応じてその場でイメージを自動的に変換します。したがって、私はこれをクライアントに配布することができないため、サードパーティのコンバータは動作しません。
ありますScanLineの使用とRGBトリプルへのアクセスを示す[docwiki]のサンプル(http://docwiki.embarcadero.com/CodeExamples/en/ScanLine_(Delphi))。 –
ああ、イメージを変換するためのユーティリティを書いていたことが分かりました。 「変換する必要がある写真は8000点以上あります(一晩)」。気にしないで。 –
@KenWhiteありがとう、それを見て... –