Anstatt den Canvas der Paintbox zu kopieren, wäre es sicher besser das Bitmap einfach neu zeichen zu lassen.
Dazu sollte man die Zeichenroutinen in einer Methode (im Beispiel
InternalPaint) konzentrieren:
Delphi-Quellcode:
procedure TForm1.InternalPaint(Canvas:TCanvas);
begin
// hier alle Zeichenfunktionen rein
end;
procedure TForm1.Paintbox1Paint(sender:TObject);
begin
InternalPaint(PaintBox1.Canvas);
end;
Jetzt ist es ein Klacks die graphische Ausgabe auf ein TBitmap zu leiten.
Das ist viel sauberer, als der Vorschlag mit dem Image.
Delphi-Quellcode:
var
bmp : TBitmap;
begin
bmp := TBitmap.Create;
try
bmp.Width := Paintbox1.Width;
bmp.Height := Paintbox1.Height;
InternalPaint(bmp.Canvas);
bmp.SaveTofile(...);
finally
bmp.Free;
end;