取下面的图像,我将用于以下示例:
未更改的尺寸目前是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 最近回答的问题进行了略微修改/修改。
如何调整围绕位图的画布大小,但不拉伸位图?