次の例で使用する以下の画像を使用します。
現在変更されていない寸法は、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 が回答した最近の質問からわずかに変更/修正されています。
ビットマップを引き伸ばすことなく、ビットマップを囲むキャンバスのサイズを変更するにはどうすればよいですか?