質問

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

正しい解決策はありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top