2010-05-21 60 views
8

我有兩個問題:創建圖形,並保存爲位圖

1)我有一個PictureBox和碼頭設置爲填充。當我調整Form的大小時,我無法在延伸的PictureBox部分創建圖形。問題是什麼?

2)我想將在PictureBox上創建的圖形轉換爲Bitmap並將其保存爲 * .JPG或* .bmp。我怎樣才能做到這一點?

回答

6

可以使用handle device得到位圖出來的圖片框

Graphics g = pictureBox1.CreateGraphics();   
Bitmap bitMap = Bitmap.FromHbitmap(g.GetHdc()); 
bitMap.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg); 

甚至更​​好的,如果在PictureBox does`nt修改圖像,你可以直接從PictureBox控件

獲得圖像
pictureBox1.Image.Save("path", System.Drawing.Imaging.ImageFormat.Jpeg); 
0

1)您的描述非常含糊。你有例外嗎?它顯示錯誤的結果嗎?發生什麼事?

2)您需要從PictureBox獲取圖像並使用其Save method

+0

1)我沒有得到任何Eception和它不顯示錯誤的結果只是Grafhic犯規科瑞。 – 2010-05-21 09:38:06

+0

請嘗試對此進行更詳細的描述......真的很難理解正在發生的事情。你怎麼知道它沒有被創建?這隻有當你設置碼頭填充? – mafu 2010-05-21 09:54:20

+0

你知道一個PictureBox有一個MouseClick事件。當我點擊圖片框時,我想在PictureBox上繪製一個矩形。它是工作,但是當我調整窗體大小的情況下,PictureBox的Dock填充它變成像Form一樣的lrger。調整大小後,我無法創建Grafhic的部分變得更大.....我希望你明白我的問題 – 2010-05-21 10:26:44

0

當Picturebox被調整大小以填充窗體時,看起來它的Image屬性保持不變。

所以你需要做的是處理PictureBox.OnSizeChanged事件,然後用下面的代碼來調整圖像大小:

private void pictureBox1_SizeChanged(object sender, EventArgs e) 
{ 
    if ((pictureBox1.Image != null)) 
    { 
     pictureBox1.Image = new Bitmap(pictureBox1.Image, pictureBox1.Size); 
    } 
} 

要保存圖像使用:

pictureBox1.Image.Save(filename, System.Drawing.Imaging.ImageFormat.Jpeg); 

希望這有幫助!

+0

-1:問題與PictureBox的圖像無關。他試圖在控件上繪製穩定的東西(PictureBox,Panle甚至Form本身)。 – 2010-05-25 12:52:20

1

試試這個,工作正常,我...

private void SaveControlImage(Control ctr) 
    { 
     try 
     { 
      var imagePath = @"C:\Image.png"; 

      Image bmp = new Bitmap(ctr.Width, ctr.Height); 
      var gg = Graphics.FromImage(bmp); 
      var rect = ctr.RectangleToScreen(ctr.ClientRectangle); 
      gg.CopyFromScreen(rect.Location, Point.Empty, ctr.Size); 

      bmp.Save(imagePath); 
      Process.Start(imagePath); 

     } 
     catch (Exception) 
     { 
      // 
     } 
    } 
+0

我之前嘗試過,不幸的是,您保存的圖像僅限於控件本身的大小。因此,如果您使用縮放來將巨大的圖片放入控件中,那麼當您導出圖片時,它將是渲染大小而不是實際大小。 – Zorgarath 2016-12-07 07:02:56