保存`Graphics`只是透明的

时间:2015-04-18 20:05:55

标签: c# graphics bitmap

这是我正在做的一些伪代码。一切正常,但后来我试图保存我的结果。保存也有效,但图像变得透明。知道什么可能导致这种奇怪的行为吗?

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);

2 个答案:

答案 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);