2012-11-29 33 views
1

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

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文件显示任何图像?我做错了什么?

非常感谢。

回答

2

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

MSDN

新的位图,该方法分别创建从克的DPIX和DpiY性能取其水平和垂直分辨率。

取而代之,请使用Graphics.FromImage()来获得可供您使用的Graphics对象。此外,你应该在绘画后DisposeGraphics对象。这是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); 
+0

非常感谢您!这正是我期待的! – 888

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