这是我正在做的一些伪代码。一切正常,但后来我试图保存我的结果。保存也有效,但图像变得透明。知道什么可能导致这种奇怪的行为吗?
static Graphics G = Panel.CreateGraphics();
//some painting -> shows up correctly on the panel
Bitmap bitmap = new Bitmap(500, 500, G);//bitmap is transparent!
bitmap.Save("path/test1.png", System.Drawing.Imaging.ImageFormat.Png);
答案 0 :(得分:1)
您正在使用的Bitmap
构造函数的文档说:
使用指定的大小和指定Graphics对象的分辨率初始化Bitmap类的新实例。
这意味着它只是从Bitmap
获得分辨率。它不会为位图绘制任何内容。要么使用Graphics.FromImage
,要么使用Hans Passant提到的Control.DrawToBitmap
方法。
我的个人偏好,我是否需要在屏幕和位图上进行绘制,将创建一个执行绘制的方法(将Graphics
对象作为参数)。然后我可以在Paint
事件处理程序或其他代码中调用它来生成位图。
此外,一般情况下,请勿使用Control.CreateGraphics
。正确的绘图方式是在控件的Paint
事件中。
答案 1 :(得分:0)
这将绘制位图,但不会显示在面板中。如果显示是必需的,那么您必须在 Paint 事件上实现它。
Bitmap bmp = new Bitmap(Panel.Width, Panel.Height);
Panel.DrawToBitmap(bmp, new Rectangle(0, 0, Panel.Width, Panel.Height));
Graphics grp = Graphics.FromImage(bmp);
Pen selPen = new Pen(Color.Blue);
grp.DrawRectangle(selPen, 10, 10, 50, 50);
bmp.Save("d:\\check3.png", System.Drawing.Imaging.ImageFormat.Png);