2012-11-29 35 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"); 
     } 
    } 
}