如下图所示,我将在以下示例中使用它:
目前尺寸未改变96 x 71
假设我想调整画布大小115 x 80
- 结果图像应该是:
最后,如果我将其调整为比原始画布更小的尺寸,例如45 x 45
输出将如下所示:
这是我到目前为止所尝试过的:
procedure ResizeBitmapCanvas(Bitmap: TBitmap; H, W: Integer);
var
Bmp: TBitmap;
Source, Dest: TRect;
begin
Bmp := TBitmap.Create;
try
Source := Rect(0, 0, Bitmap.Width, Bitmap.Height);
Dest := Source;
Dest.Offset(Bitmap.Width div 2, Bitmap.Height div 2);
Bitmap.SetSize(W, H);
Bmp.Assign(Bitmap);
Bmp.Canvas.FillRect(Source);
Bmp.Canvas.CopyRect(Dest, Bitmap.Canvas, Source);
Bitmap.Assign(Bmp);
finally
Bmp.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ResizeBitmapCanvas(Image1.Picture.Bitmap, 110, 110);
end;
如果您在加载到 TImage 的位图上尝试上述操作,则实际位图不会居中,但画布的大小会发生变化。
我为图像设置的属性是:
Image1.AutoSize := True;
Image1.Center := True;
Image1.Stretch := False;
我认为这可能是一条线Dest.Offset(Bitmap.Width div 2, Bitmap.Height div 2);
需要查看哪个来计算正确的中心位置?
该代码已根据 David Heffernan 最近回答的问题进行了轻微调整/修改。
如何调整位图周围画布的大小,但不拉伸位图?