2010-11-29 8 views
0

ビットマップにC#WinformsのGraphicsオブジェクトを保存しようとすると、まだ私はPaintイベントの外にこのコードでArgumentExceptionがを取得しています:塗料の外でビットマップにグラフィックスを保存しますか?

this.GraphicsはちょうどPaintイベントハンドラで設定されている
public Bitmap Bitmap 
{ 
    get 
    { 
     return new Bitmap(100, 100, this.Graphics); 
    } 
} 

、Iオブジェクトを推測することは、イベントの外では無効になります。画像を保存するためにそこにコードを挿入する必要がないので、面倒です。誰かが私を正しい方向に向けることができますか?

編集: コントロールをビットマップに '描画'できるようにするためには、私のペイントコードを再調整する必要があります。

+0

完全なエラーメッセージを投稿してください。それまで:UserControl.CreateGraphics()を試したことがありますか? – basti

+0

System.ArgumentException:パラメータが無効です。 at System.Drawing.Bitmap..ctor(Int32 width、Int32 height、Graphics g) at FlowSharp.FlowChartControl.get_Bitmap()(C:\ Users \ Dan \ Documents \ My Dropbox \ Programming \ FlowSharp \ FlowChartControl) cs:line 35 at FlowSharp.fFlowSharp.bMPToolStripMenuItem_Click(Object sender、EventArgs e)in C:\ Users \ Dan \ Documents \ My Dropbox \ Programming \ FlowSharp \ FlowSharpForm.cs:行441 – Dan

答えて

1

Graphicsオブジェクトが配置された後、はい、これが爆撃されます。このコンストラクタを使用する理由はほとんどなく、ビットマップ解像度のみを設定します。それが実際に重要なのであれば、Bitmap.SetResolution()メソッドを直接使用してください。

0

実際にグラフィックを使用する場合はthis.CreateGraphicsを使用できます。

public Bitmap Bitmap 
{ 
    get 
    { 
     using (var graphics = this.CreateGraphics()) 
     { 
      return new Bitmap(100, 100, graphics); 
     } 
    } 
} 

しかし

return new Bitmap(100, 100); 

はおそらく十分であろう。

編集:
ビットマップを変更したい場合は、グラフィックスは、そのビットマップからオブジェクトを作成します。

Bitmap bitmap = new Bitmap(100, 100); 
using (var graphics = Graphics.FromImage(bitmap)) 
{ 
    // modify bitmap 
} 
関連する問題