我有面板和各种控件。我想将此面板的图像保存到文件中,我该怎么做?
不需要做类似屏幕截图的操作,但我需要在我的应用程序中使用某个面板的图像,而我想在我的应用程序中点击按钮来执行此操作。
最好的问候,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;
}
}
}
这是我在图表上绘制自定义行的绘图代码。你能帮我做正确的事吗?
答案 0 :(得分:14)
使用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");
}
}
答案 1 :(得分:3)
回复您的修改:
如果使用Graphics
方法返回的CreateGraphics
对象绘制面板,则图形不是永久性的。在下次重绘控件时,将在对象上绘制的任何内容都将被删除。 (有关此主题的更多详细信息,请参阅:http://www.bobpowell.net/picturebox.htm和http://www.bobpowell.net/creategraphics.htm)
当您按照Hans Passant的回答建议使用DrawToBitmap
方法时,面板控件将重新绘制,这会导致您的绘图丢失。
相反,如果您希望绘图是永久性的,则需要处理面板控件的Paint
事件。每次需要重绘控件时都会引发此事件,并提供包含PaintEventArgs
对象的Graphics
实例,您可以使用该对象永久地在控件的表面上绘制,就像您使用的一样使用Graphics
方法返回的CreateGraphics
对象。
一旦您更正了绘图代码,就可以使用Hans的解决方案。