C# 当按下“清除”按钮时,如何保持在面板上绘制的内容并保存到位图?

C# 当按下“清除”按钮时,如何保持在面板上绘制的内容并保存到位图?,c#,bitmap,C#,Bitmap,我想完成我女儿的绘画程序,当应用程序最小化时,我在面板上保持图形渲染时遇到问题。我还想让程序在她点击清除和/或关闭按钮时自动将她在面板上绘制的内容保存到文件中 如果您想保留图形,您可以不在面板的图形中绘制,而是在该面板的图像中绘制,尽管如此,您可以使用panel.DrawToImage,它应该是这样的 Panel.DrawToBitmap(Bitmap, Panel.ClientRectangle); Bitmap bmp; //this will be the image where you

我想完成我女儿的绘画程序,当应用程序最小化时,我在面板上保持图形渲染时遇到问题。我还想让程序在她点击清除和/或关闭按钮时自动将她在面板上绘制的内容保存到文件中

如果您想保留图形,您可以不在面板的图形中绘制,而是在该面板的图像中绘制,尽管如此,您可以使用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);
}

对于“关闭”功能,表单有一个FormsClosing事件,您可以从那里调用“保存”

对于问题的第二部分,您需要一个类似于此的方法:

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);
    }                       
}

如果您想在她关闭窗口时处理它,请在窗口中使用关闭事件。

您不需要将绘图代码放在pnl1\u MouseMove中,与从pnl1.CreateGraphics;获得的新图形相对应;。你需要做两件事中的一件

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

2不要绘制面板的图形对象,在类中的图形上调用CreateGraphics,然后将该位图绘制为pn1的背景


方法2的好处是,它将允许您的大多数代码都是相同的,您现在只需根据位图而不是直接针对面板进行绘制。

我真的很抱歉。。。看看你的答案,试着找出如何实现你的答案。我会用它来代替g=pnl1.CreateGraphics;?谢谢你告诉我在哪里编辑和更正!我真的很感谢你的帮助!这是否像声明位图bmp1这样的变量;然后更改g=pnl1.CreateGraphics;更像g=pnl1.CreateGraphicsBitmap bmp1,;很抱歉我是一个noob程序员,问了很多问题。谢谢大家的回复!谢谢你的方法。我将看到如何将其实现到代码的底部。谢谢大家的回复!我真的很感激!