-1

いくつかのヘルプ関数でサブクラス化ExtCtrls.TPaintBoxし、メソッドをオーバーライドしましたPaintTPaintBoxカスタム ペイントボックス オブジェクトとして機能し、目的の出力を描画するフォームに を追加できます。

ここで、ペイントボックスの内容をファイルに描画 (書き込み) したいのですが、サイズが異なります。たとえば、私のアプリケーションの UI 内では、ペイントボックスのサイズは 150x600 (幅 x 高さ) ですが、ファイルに描画するときはそれを大きくする必要があります。

TPaintBox.Paint描画コード (= ) を再利用して仮想的に描画しan object、そのオブジェクトをファイルに保存できるようにしたいと考えています。

すでにエクスポートできていますが、エクスポート時にサイズを変更すると、ペイントで拡大したように見えます。

4

1 に答える 1

1

ペイント ボックスの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;
于 2013-06-10T14:51:06.860 に答える