2009-12-02 77 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();