Pues calculando la posición, no es una operación tan complicada. Para eso puedes usar las propiedades TextHeight y TextWidth del Canvas, que te dan respectivamente la altura y el ancho de un texto dentro de ese canvas con la fuente actual. Por ejemplo:
Código Delphi
[-]
var
Bitmap: TBitmap;
R: TRect;
begin
Bitmap:= TBitmap.Create;
try
Bitmap.Width:= 100;
Bitmap.Height:= 100;
R:= Rect(10,10,90,90);
Bitmap.Canvas.Rectangle(R);
Bitmap.Canvas.Font.Size:= 32;
with Bitmap.Canvas do
TextOut(
(R.Left + R.Right - TextWidth('A')) div 2,
(R.Top + R.Bottom - TextHeight('A')) div 2,
'A');
Canvas.Draw(0,0,Bitmap);
finally
Bitmap.Free;
end;
end;