C#图形以Form形式显示,但不在Bitmap中显示

时间:2012-11-29 10:10:58

标签: c# graphics bitmap

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

this question个答案之后,我在Form类中编写了一个方法:

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

      // drawing stuff

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

通过这种方式,表单可以正确显示图形,并创建名为“image.bmp”的位图文件,但该文件是白色图像。

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

非常感谢。

3 个答案:

答案 0 :(得分:2)

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

来自MSDN

  

此方法创建的新Bitmap分别从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);

答案 1 :(得分: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");
        }
    }
}   

答案 2 :(得分:1)

你需要一个代表位图的图形对象,这样你就可以在image.do上画画了这个:

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

    Bitmap bmp = new Bitmap(this.Width, this.Height, d);
              bmp.Save("image.bmp");//for your need
         Graphics d=Graphics.FromImage(bmp);