2017-08-30 30 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