如何在C#中将图形对象保存为图像?

如何在C#中将图形对象保存为图像?,c#,image,graphics,C#,Image,Graphics,我有面板和各种各样的控件。我想将此面板的图像保存到文件中,如何执行此操作 我需要做一些类似截图的事情,但我只需要我的应用程序中某个面板的图像,我想在我的应用程序中点击一个按钮就可以做到这一点 向你问好,普里莫兹 编辑: 我也用这个代码在这个面板上画图 Graphics g = chartTemperature.CreateGraphics(); g.DrawLine(p, prevPoint, e.Location);

我有面板和各种各样的控件。我想将此面板的图像保存到文件中,如何执行此操作

我需要做一些类似截图的事情,但我只需要我的应用程序中某个面板的图像,我想在我的应用程序中点击一个按钮就可以做到这一点

向你问好,普里莫兹


编辑: 我也用这个代码在这个面板上画图

            Graphics g = chartTemperature.CreateGraphics();    
            g.DrawLine(p, prevPoint, e.Location);
            prevPoint = e.Location;
但我并没有把这件事想象出来。为什么,以及如何解决这个问题


编辑2:

namespace Grafi
{
    public partial class Form1 : Form
    {

        bool isDrawing = false;
        Point prevPoint;

        public Form1()
        {
            InitializeComponent();
        }

        private void chartTemperature_MouseDown(object sender, MouseEventArgs e)
        {
            isDrawing = true;
            prevPoint = e.Location;
        }

        private void chartTemperature_MouseMove(object sender, MouseEventArgs e)
        {
            Pen p = new Pen(Color.Red, 2); 
            if (isDrawing)
            {
                Graphics g = chartTemperature.CreateGraphics();    
                g.DrawLine(p, prevPoint, e.Location);
                prevPoint = e.Location;

                numOfMouseEvents = 0;              
            }
            p.Dispose();
        }

        private void chartTemperature_MouseUp(object sender, MouseEventArgs e)
        {
            isDrawing = false;
        }
    }
} 

这是我在图表上绘制自定义线的绘图代码。你能帮我用正确的方法吗?

使用Control.DrawToBitmap()方法。例如:

    private void button1_Click(object sender, EventArgs e) {
        using (var bmp = new Bitmap(panel1.Width, panel1.Height)) {
            panel1.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
            bmp.Save(@"c:\temp\test.png");
        }
    }

回应您的编辑:

如果使用
CreateGraphics
方法返回的
Graphics
对象在面板上绘图,则图形不是永久性的。下次重画控件时,在对象上绘制的任何内容都将被擦除。(有关此主题的更多详细信息,请参阅:和)

当您按照Hans Passant的回答使用
DrawToBitmap
方法时,面板控件将被重新绘制,这将导致图形丢失

相反,如果希望图形是永久性的,则需要处理面板控件的事件。每次需要重新绘制控件时都会引发此事件,并提供一个
PaintEventArgs
实例,该实例包含一个
Graphics
对象,您可以使用该对象在控件曲面上永久绘制,方法与使用
CreateGraphics
方法返回的
Graphics
对象相同


一旦您更正了绘图代码,就可以使用Hans的解决方案。

这对我来说并不完全有效。我在原来的问题中添加了我的问题。你不应该这样画。例如,尝试最小化,然后恢复窗口。电话线断了。当你在XP上移动另一个窗口时,同样的事情也会发生。改为使用控件的绘制事件。我编辑了初始问题以添加绘图代码,以便在图表上绘制自定义线。你能帮我把它做好吗?请开始一个关于这个的新问题。我打开了它。我编辑了最初的问题,添加了绘图代码,以便在图表上绘制自定义线。你能帮我把它做好吗?我在绘画比赛中放了什么