C# Bitmap Save Generic GDI+ Error


Image.Save 方法 (String)

將該 Image 保存到指定的文件或流。

命名空間:   System.Drawing
程序集:  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 文件的編碼器。

不允許將圖像保存到構造該圖像的文件,這樣會引發異常。

Referencehttp://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 方法會鎖住文件的原因及可能的解決方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM