Image.Save 方法 (String)
將該 Image 保存到指定的文件或流。
程序集: System.Drawing(在 System.Drawing.dll 中)
public void Save( string filename )
參數
- filename
-
類型:
System.String
字符串,包含要將此 Image 保存到的文件的名稱。
異常 | 條件 |
---|---|
ArgumentNullException | filename 為 null.。 |
ExternalException | 該圖像以錯誤的圖像格式保存。 - 或 - 該圖像被保存到創建該圖像的文件。 |
如果圖像的文件格式的編碼器不存在,則使用可移植網絡圖形 (PNG) 編碼器。 使用 Save 方法將圖形圖像保存為 Windows 圖元文件格式 (WMF) 或增強型圖元文件格式 (EMF) 文件時,結果文件將另存為可移植網絡圖形 (PNG) 文件。 發生此行為是由於 .NET Framework 的 GDI+ 組件沒有可用來將文件另存為 .wmf 或 .emf 文件的編碼器。
不允許將圖像保存到構造該圖像的文件,這樣會引發異常。
Reference:http://www.codeproject.com/Questions/52709/C-Bitmap-Save-Generic-GDI-Error
這個網頁里解釋了為什么會出現這樣的問題和怎么解決的。
Refernence:
GDI+中發生一般性錯誤
Bitmap構造函數
命名空間: System.Drawing
程序集: System.Drawing(在 System.Drawing.dll 中)
1.從指定的現有圖像初始化 Bitmap 類的新實例。
public Bitmap( Image original )
參數
- original
-
類型:
System.Drawing.Image
從中創建新 Bitmap 的 Image。
2.從指定的文件初始化 Bitmap 類的新實例。
public Bitmap( string filename )
參數
- filename
-
類型:
System.String
位圖文件的名稱和路徑。
異常 | 條件 |
---|---|
FileNotFoundException | 找不到指定文件。 |
文件名和路徑可以是相對於應用程序的路徑或者是絕對路徑。 使用此構造函數打開以下文件格式的圖像:BMP、GIF、EXIF、JPG、PNG 和 TIFF。 有關支持的格式的更多信息,請參見位圖類型。 在釋放 Bitmap 之前,此文件將一直保持鎖定狀態。
Image.FromFile 一旦使用后,對應的文件在一直調用 其生成的Image對象被Disponse前都不會被解除鎖定,這就造成了一個問題,就是在這個圖形被解鎖前無法對圖像進行操作(比如刪除,修改等操作).
舉例代碼
第一段代碼 Bitmap bmp = new Bitmap("1.bmp"); bmp.save("1.bmp"); //這里拋出異常“GDI+發生一般錯誤” 第二段代碼 Image img = Image.FomFile("1.bmp"); 或 Bitmap img = new Bitmap("1.bmp"); Bitmap bmp = new Bitmap(img) img.Dispose(); bmp.save("1.bmp"); //而這里卻不會 原因:第一段就不用多說了,圖像被鎖定,不能保存同一文件 第二段雖然1.bmp也被鎖定了,但是new Bitmap(img)后是一個新的實例,相當於復制了一份圖像。img.Dispose將1.bmp接觸鎖定釋放了。
reference:Image.FromFile 方法會鎖住文件的原因及可能的解決方法