2017-08-30 1 views
0

私は、通常は視覚化のためにフォームに追加するいくつかのプロットを含むクラスMyUserControlを持っています。C#レンダリングパネルをプログラム的に

しかし、画像ファイルにMyUserControlオブジェクトを書き込む必要がある機能がありますが、画像内に白い部分しか見えません。次のように

私のコードは次のとおりです。

MyUserControl uc = new MyUserControl(); 
uc.loadData(); 
int width = uc.Size.Width; 
int height = uc.Size.Height; 
Bitmap bm = new Bitmap(width, height); 
uc.DrawToBitmap(bm, new Rectangle(0, 0, width, height)); 
bm.Save(@"C:\path\to\file.bmp"); 

私はそのすでにレンダリングのためにパネルに追加されて、それは代わりに、ファイルに直接レンダリングしてきた思考の中に「トリック」私のMyUserControlに行うためには何が必要なのか?

+0

MyUserControlはどのクラスとインターフェイスを継承しますか? – WithMetta

+0

bm.Save()を呼び出す前にuc.OnPaint(null)を呼び出してみてください。 https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/rendering-a-windows-forms-control – WithMetta

+0

DrawToBitmapは、Paintイベントで描画したものを描画します。 – TaW

答えて

0

SaveToBitmap()メソッドをコントロールに追加できます。保護されたOnPaint()メソッドを呼び出すことができます。

public class MyUserControl : UserControl 
{ 
    ... 
    public void SaveToBitmap(string filePath) 
    { 
    using(Graphics g = this.CreateGraphics()) 
    { 
     var bmp = new Bitmap(this.ClientSize.Width, this.ClientSize.Height, g); 
     using(Graphics gBmp = Graphics.FromImage(bmp)) 
     { 
     PaintEventArgs e = new PaintEventArgs(gBmp, this.ClientRectangle); 
     this.OnPaint(e);   
     } 
     bmp.Save(filePath);   
    } 
    } 
} 
+0

残念ながら、これは完全に黒い100x200ピクセルの画像を書き込むだけです。 – BGSGunterGlut

関連する問題