如何保持在面板上绘制的内容并在" CLEAR"时保存到位图。按下按钮?

时间:2014-12-11 23:49:02

标签: c# bitmap

我想为我的女儿完成我的绘画程序,并且在应用程序最小化时面板上的图形呈现问题。我还想让程序自动保存到文件中,当她点击“CLEAR”和/或“CLOSE”按钮时,她在面板上绘制了什么。

3 个答案:

答案 0 :(得分:0)

如果你想保留你的绘图你可以而不是在面板的图形中绘制该面板的图像,但是你可以使用Panel.DrawToImage()它应该是这样的

Panel.DrawToBitmap(Bitmap, Panel.ClientRectangle);
Bitmap bmp; //this will be the image where you would draw to
Graphics g; // the graphics
public ALANA_PAINT()
{
    //do your stuff
    bmp = new Bitmap(Width,Height)// Initialize the bitmap
    Panel.BackgroundImage = bmp;
    g = Graphics.FromImage(bmp);
}

//your normal drawing methods

public void Save()
{
   bmp.Save(path,imageFormat);
}

对于close函数,表单有一个FormsClosing事件,你可以从那里调用

答案 1 :(得分:0)

你的问题的第二部分需要这样的方法:

public void SaveBitmap(string location)
{
    Bitmap bmp = new Bitmap((int)myPanel.Width, (int)myPanel.Height);
    DrawToBitmap(bmp, new Rectangle(0, 0, myPanel.Width, myPanel.Height));

    using (FileStream saveStream = new FileStream(location + ".bmp", FileMode.OpenOrCreate))
    {
        bmp.Save(saveStream, ImageFormat.Bmp);
    }                       
}

如果要在关闭窗口时处理它,请使用窗口中的Closing事件。

答案 2 :(得分:0)

您不需要将pnl1_MouseMove中的绘图代码放在Graphics的新pnl1.CreateGraphics();上。你需要做两件事之一。

1)保留所有"形状的列表"需要绘制和重绘,然后订阅事件pn1.Paint += pn1_Paint并让该绘制方法遍历您记录的所有形状的列表并重新绘制它们

2)不要绘制面板的Graphics对象,在类中的Bitmap上调用CreateGraphics,然后将该位图绘制为{{1}的背景}。

方法2的好处是它允许你的大多数代码都是相同的,你现在只是绘制一个位图,而不是直接针对面板。