画像のサイズを変更するには?

私はイメージ(500×500)を持っていますが、それを200×200にリサイズしてTImageにペイントする必要があります。どのようにそのような結果を達成するには?

Note
I know about Stretch property in TImage, but I want to
resize the image programmatically.

ベストアンサー

新しいディメンションが元のディメンションよりも大きくないことがわかっている場合は、単純に行うことができます

procedure ShrinkBitmap(Bitmap: TBitmap; const NewWidth, NewHeight: integer);
begin
  Bitmap.Canvas.StretchDraw(
    Rect(0, 0, NewWidth, NewHeight),
    Bitmap);
  Bitmap.SetSize(NewWidth, NewHeight);
end;

新しい寸法が元の寸法よりも小さい ではないことが分かっている場合は、対応するコードを書くための練習として残します。

一般的な機能が必要な場合は、

procedure ResizeBitmap(Bitmap: TBitmap; const NewWidth, NewHeight: integer);
var
  buffer: TBitmap;
begin
  buffer := TBitmap.Create;
  try
    buffer.SetSize(NewWidth, NewHeight);
    buffer.Canvas.StretchDraw(Rect(0, 0, NewWidth, NewHeight), Bitmap);
    Bitmap.SetSize(NewWidth, NewHeight);
    Bitmap.Canvas.Draw(0, 0, buffer);
  finally
    buffer.Free;
  end;
end;

このアプローチには、
2つのピクセルコピー操作を行うことの欠点があります。私はその問題の少なくとも2つの解決策を考えることができます。
(どちら?)

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です