我有图片(500x500),但是我需要将其尺寸调整为200x200并将其绘制在TImage上。如何达到这样的效果?

注意我知道TImage中的Stretch属性,但是我想以编程方式调整图像的大小。

最佳答案

如果您知道新尺寸不大于原始尺寸,则只需

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;


这种方法的缺点是要进行两次像素复制操作。我至少可以想到两种解决方案。 (哪一个?)

10-05 22:25