保存“图形”只是透明的



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

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

您正在使用的 Bitmap 构造函数的文档说:

使用指定的大小和指定图形对象的分辨率初始化位图类的新实例。

这意味着它只是从Bitmap获得分辨率。它不会向位图绘制任何内容。要么使用Graphics.FromImage,要么如Hans Passant所提到的,使用Control.DrawToBitmap方法。

我个人的偏好,如果我需要同时绘制屏幕和位图,将是创建一个进行绘画的方法(将Graphics对象作为参数)。然后,我可以在 Paint 事件处理程序中调用它,或者从其他代码中调用它以生成位图。

另外,一般来说,永远不要使用 Control.CreateGraphics .正确的绘制方法是在控件的Paint事件中。

这将绘制位图,但不会显示在面板中。如果显示是必需的,则必须在 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);

相关内容

  • 没有找到相关文章

最新更新