2009-12-02 39 views
5

我正在执行此绘画应用程序。这很简单。它由一个面板组成,我将画在上面,最后我将保存为JPG或BMP或PNG文件。将面板保存为图像

我的应用程序工作完美,但我面临的问题是,当我保存输出不是在面板上绘制黑色图像没有什么只是黑色。

我所有的作品被保存为

Thepic = new Bitmap(panel1.ClientRectangle.Width, this.ClientRectangle.Height); 

和鼠标(向下,向上的东西)我有

snapshot = (Bitmap)tempDraw.Clone(); 

,它通常保存的工作,但再次rsult是黑色图像而不是面板包含的内容。

+0

你的过滤器中有“pgn”而不是“png”。 – 2009-12-02 22:36:05

+0

...我会自己纠正这个帖子,但如果这是从你的真实来源粘贴,你可能想知道它... – 2009-12-02 22:36:37

+0

它确定,但仍然我很困惑为什么输出是stil黑色图片 – Tony 2009-12-02 22:39:19

回答

9

我认为问题可能是您使用“克隆”方法。

试试“DrawToBitmap” - 这对我来说是过去的工作。

下面是来自一个名为 “plotPrinter” 控制节省了位图示例:

 int width = plotPrinter.Size.Width; 
     int height = plotPrinter.Size.Height; 

     Bitmap bm = new Bitmap(width, height); 
     plotPrinter.DrawToBitmap(bm, new Rectangle(0, 0, width, height)); 

     bm.Save(@"D:\TestDrawToBitmap.bmp", ImageFormat.Bmp); 
 Be aware of saving directly to the C directly as this is not 
     permitted with newer versions of window, try using SaveFileDialog. 
SaveFileDialog sf = new SaveFileDialog(); 
    sf.Filter = "Bitmap Image (.bmp)|*.bmp|Gif Image (.gif)|*.gif|JPEG Image (.jpeg)|*.jpeg|Png Image (.png)|*.png|Tiff Image (.tiff)|*.tiff|Wmf Image (.wmf)|*.wmf"; 
    sf.ShowDialog(); 
    var path = sf.FileName; 
+4

这很好用对于没有子控件的控件,但是当控件有子控件时,'DrawToBitmap'以反向的'z'顺序绘制子控件(这意味着后面的控件在真正的前控件前面绘制)。 – 2009-12-02 23:25:07

+0

非常感谢您的解决方案.... – Tony 2009-12-02 23:28:41

+0

找不到drawtobitmap方法 – 2016-08-19 08:36:24

0

你可以试试这个,它为我工作,而不是我的sed的MemoryStream 。

MemoryStream ms = new MemoryStream(); 
Bitmap bmp = new Bitmap(panel1.Width, panel1.Height); 
panel1.DrawToBitmap(bmp, new System.Drawing.Rectangle(0, 0, panel1.Width, panel1.Height)); 
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); //you could ave in BPM, PNG etc format. 
byte[] Pic_arr = new byte[ms.Length]; 
ms.Position = 0; 
ms.Read(Pic_arr, 0, Pic_arr.Length); 
ms.Close();