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

我有面板和各种控件。 我想将此面板的图像保存到文件中,我该怎么做?

我需要做一些截图,但我需要在我的应用程序中使用某个面板的图像,我想在我的应用程序中点击一下按钮。

最好的问候,Primoz


编辑:我也使用此代码在此面板上绘制

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对象在面板上绘图,则图形不是永久性的。 在下次重绘控件时,将在对象上绘制的任何内容都将被删除。 (有关此主题的更多详细信息,请参阅: http : //www.bobpowell.net/picturebox.htm和http://www.bobpowell.net/creategraphics.htm )

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

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

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