我有图片(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;
这种方法的缺点是要进行两次像素复制操作。我至少可以想到两种解决方案。 (哪一个?)