ペイント ボックスのOnPaintイベント ハンドラは、ペイント ボックスのサイズに合わせてペイントすることに専念している可能性があります。サイズが実行時にのみ知られている一般的なキャンバスに描画できるようにするには、ペイント コードを一般化する必要があります。そうすれば、低解像度のペイント ボックスと高解像度のファイルに同じペイント コードで描画できます。
OnPaintイベント ハンドラー内のコードを、次のような別のメソッドに抽出します。
procedure TForm1.DoPaintBoxPaint(Canvas: TCanvas);
begin
// All painting code goes here. Use Canvas.ClipRect to infer size of canvas.
end;
OnPaint次に、ハンドラーからこのメソッドを呼び出します。PaintBox1.Canvasパラメータとしてメソッドに渡します。
概要は次のようになります。
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
DoPaintBoxPaint(PaintBox1.Canvas);
end;
最後に、画像をファイルに保存するメソッドからメソッドを呼び出すことができます。その場合、保存する前に画像を描画するための一時的なビットマップがあると仮定します。そのビットマップのキャンバスを渡します。そのコードのスケッチは次のようになります。
Bitmap := TBitmap.Create;
try
Bitmap.SetSize(Width, Height);
DoPaintBoxPaint(Bitmap.Canvas);
Bitmap.SaveToFile(...);
finally
Bitmap.Free;
end;