【发布时间】:2023-03-30 20:41:01
【问题描述】:
我有一个图形对象和一个面板。 Graphics 对象使用面板中的处理程序进行实例化。然后,Panel 会更新为 Paint 动作。在 Paint 动作中,Graphics 对象用于绘画。有时通过代码我使用 Invalidate() 来更新面板。
我想将 Graphics 对象的内容或 Panel 的内容保存到一个文件中。每当我尝试这样做时,都会创建图像文件,但是是空白的。
这里是一些sn-ps的代码:
我将 Graphics 对象作为类变量初始化:
Graphics GD_LD;
然后在构造函数中,我使用面板处理程序来实例化对象:
GD_LD = Graphics.FromHwnd(panelDrawLD.Handle);
然后我有用于Panel的Paint动作的绘图功能,我是否使用Graphics对象来制作所有绘图:
private void panelDrawLD_Paint(object sender, PaintEventArgs e)
{
..... some code ....
//Code example
GD_LD.FillPolygon(blackBrush, getPoints(min, sizeGP, scaleX, scaleY));
GD_LD.FillPolygon(blackBrush, getPoints(max, sizeGP, scaleX, scaleY));
..... some code ....
}
以上内容可以很好地在面板中绘制并始终与绘图保持一致。
问题在于尝试将面板保存到图像文件时:
Bitmap I_LD = new Bitmap(panelDrawLD.Size.Width, panelDrawLD.Size.Height);
panelDrawLD.DrawToBitmap(I_LD, new Rectangle(0,0, panelDrawLD.Size.Width, panelDrawLD.Size.Height));
I_LD.Save(tempPath + "I_LD.bmp",ImageFormat.Bmp);
图像文件已创建但没有内容。只是空白。
我看到了一些关于这个主题的帖子,但我无法适应我的情况。
我做错了什么?有什么可能的解决方案?
【问题讨论】:
-
Graphics.FromHwnd几乎总是做错事。在您的绘画活动中,您应该使用e.graphics,而不是DG_LD。 -
@RezaAghaei 感谢您的链接,那里有一本很棒的手册!
标签: c# winforms graphics panel gdi+