Redimensionar a tela em torno de um bitmap?

Veja a imagem abaixo que eu usarei para os seguintes exemplos:

As dimensões não relacionadas são atualmente96 x 71

Vamos dizer que eu queria redimensionar a tela para115 x 80 - a imagem resultante deve então ser:

Finalmente, se eu redimensionei para um tamanho menor do que a tela original foi, por exemplo45 x 45 a saída seria assim:

Isso é o que eu tentei até agora:

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;

Se você tentar o acima em um bitmap carregado em um TImage, o bitmap real não será centralizado, mas a tela muda de tamanho.

As propriedades que defini para a imagem são:

Image1.AutoSize := True;
Image1.Center   := True;
Image1.Stretch  := False;

Acho que poderia ser a linhaDest.Offset(Bitmap.Width div 2, Bitmap.Height div 2); que precisa olhar, para calcular a posição central correta?

O código foi adaptado / modificado ligeiramente de uma pergunta recente que David Heffernan respondeu.

Como redimensiono a tela que envolve um bitmap, mas sem esticar o bitmap?

questionAnswers(1)

yourAnswerToTheQuestion