将面板保存为图像

时间:2009-12-02 22:32:38

标签: c# drawing

我正在做这个绘画应用程序。这很简单。它由一个我将绘制的面板组成,然后最终我将保存为JPG或BMP或PNG文件。

我的应用程序工作得很好,但我面临的问题是,当我保存输出时,不是面板上绘制的输出,它的黑色图像不仅仅是黑色。

我的所有作品都保存为

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

并且在鼠标上(向下,向上)我有

snapshot = (Bitmap)tempDraw.Clone();

并且它正常保存了工作但是rsult又是黑色图像不是面板包含的内容。

2 个答案:

答案 0 :(得分:11)

我认为问题可能在于你正在使用“克隆”方法。

尝试“ 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; 

答案 1 :(得分:0)

你可以尝试这个,它对我有用,而不是我发送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();