2013-05-01 220 views
2

我想打開一個位圖文件,然後將其更改並保存,但出現一些錯誤。其代碼如下:如何打開位圖文件,將其更改並保存?

var tempFileNamePath = Path.Combine(workingDirectory, fileName); 
Bitmap image = new Bitmap(tempFileNamePath); 
var newImage = (Bitmap)image.Clone(); 
image.Dispose(); 

newImage.EnhanceImage(); 
newImage.Save(tempFileNamePath, System.Drawing.Imaging.ImageFormat.Jpeg); 
newImage.Dispose(); 

但它無法保存與錯誤的文件:GDI中發生一般性錯誤+

爲什麼那朵正在發生的任何想法?

回答

4

Bitmap.Clone()不會做你希望的。這是一個複製,它仍然使用原始圖像的像素數據。因此,放置原始圖像不會釋放文件上的鎖定。

要獲得副本使用位圖(圖片)構造函數:

Bitmap newImage = null; 
using (var image = new Bitmap(tempFileNamePath)) { 
    newImage = new Bitmap(image); 
} 

重命名原始文件將使用較少的內存廉價替代品,有利於這個當圖像大:

newImage.EnhanceImage(); 
var tmpname = tempFileNamePath + ".bak"; 
System.IO.File.Delete(tmpname); 
System.IO.File.Move(tempFileNamePath, tmpname); 
try { 
    newImage.Save(tempFileNamePath, System.Drawing.Imaging.ImageFormat.Jpeg); 
} 
catch { 
    System.IO.File.Move(tmpname, tempFileNamePath); 
    throw; 
} 
finally { 
    newImage.Dispose(); 
} 
System.IO.File.Delete(tmpname); 
+0

謝謝。重命名技巧不起作用,因爲我想對圖像執行一些圖像處理,然後保存它們。 – mans 2013-05-01 13:36:40

相關問題