我正在做这个绘画应用程序。这很简单。它由一个我将绘制的面板组成,然后最终我将保存为JPG或BMP或PNG文件。
我的应用程序工作得很好,但我面临的问题是,当我保存输出时,不是面板上绘制的输出,它的黑色图像不仅仅是黑色。
我的所有作品都保存为
Thepic = new Bitmap(panel1.ClientRectangle.Width, this.ClientRectangle.Height);
并且在鼠标上(向下,向上)我有
snapshot = (Bitmap)tempDraw.Clone();
并且它正常保存了工作但是rsult又是黑色图像不是面板包含的内容。
答案 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();