如何在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上移动另一个窗口时,同样的事情也会发生。改为使用控件的绘制事件。我编辑了初始问题以添加绘图代码,以便在图表上绘制自定义线。你能帮我把它做好吗?请开始一个关于这个的新问题。我打开了它。我编辑了最初的问题,添加了绘图代码,以便在图表上绘制自定义线。你能帮我把它做好吗?我在绘画比赛中放了什么