1

我正在使用 C#,我想在窗体上绘制一些多边形,然后将图形保存在位图中。

按照这个问题的答案,我在我的 Form 类中编写了一个方法:

  private void draw_pol()
  {
      Graphics d = this.CreateGraphics();

      // drawing stuff

      Bitmap bmp = new Bitmap(this.Width, this.Height, d);
      bmp.Save("image.bmp");
  }

这样,Form 可以正确显示图形并创建名为“image.bmp”的位图文件,但该文件是白色图像。

为什么 bmp 文件不显示任何图像?我做错了什么?

非常感谢你。

4

3 回答 3

2

您传递给位图的图形参数仅用于指定位图的分辨率。它不会以任何方式绘制到位图。

来自MSDN

此方法创建的新位图分别从 g 的 DpiX 和 DpiY 属性获取其水平和垂直分辨率。

相反,使用Graphics.FromImage()来获取Graphics您可以使用的对象。此外,你应该画后Dispose的对象。Graphics这是using语句的理想用法。

Bitmap bmp = new Bitmap(this.Width, this.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
    //paint stuff
}
bmp.Save(yourFile);

如果您还需要将其绘制到表单上,您可以轻松地绘制您创建的位图:

Graphics g = this.CreateGraphics();
g.DrawImage(bmp, 0, 0);
于 2012-11-29T10:17:02.367 回答
2

一个Graphics实例只在一个上运行Bitmap。它要么是您要保存的那个,要么是您表单上的那个。

例如,您可以这样做以在表单上呈现绘制的位图并在之后保存它:

private void DrawOnBitmap()
{
    using (var bitmap = new Bitmap(this.Width, this.Height))
    {
        using (var bitmapGraphics = Graphics.FromImage(bitmap))
        {
            // Draw on the bitmap
            var pen = new Pen(Color.Red);
            var rect = new Rectangle(20, 20, 100, 100);
            bitmapGraphics.DrawRectangle(pen, rect);

            // Display the bitmap on the form
            using (var formGraphics = this.CreateGraphics())
            {
                formGraphics.DrawImage(bitmap, new Point(0, 0));
            }

            // Save the bitmap
            bitmap.Save("image.bmp");
        }
    }
}   
于 2012-11-29T10:24:40.760 回答
1

你需要一个代表位图的图形对象,这样你就可以在图像上绘图。这样做:

  • 创建位图对象
  • 使用 Graphics.FromImage 方法创建图形对象
  • 将位图对象作为参数传递给图形对象

    Bitmap bmp = new Bitmap(this.Width, this.Height, d);
              bmp.Save("image.bmp");//for your need
         Graphics d=Graphics.FromImage(bmp);
    
于 2012-11-29T10:16:06.183 回答