GDI+ 起源於 C 撰寫的 GDI,XP 以 C++ 重寫並封裝入 .NET Framework 1.0。歷經兩次重大安全性補丁(MS04-028 JPEG 緩衝區溢位、MS08-052 遠端代碼執行)。雖無 GPU 加速(Vista 推薦 WDDM),一般應用仍足夠。
代碼:
string file = "sample.jpg";
Bitmap bmp = new Bitmap(file);
bmp.Save(file, ImageFormat.Jpeg); // 拋出 ExternalException (0x80004005)
錯誤訊息「Unspecified Error」毫無線索。呼叫 Marshal.GetLastWin32Error() 得 Win32 錯誤碼 32 (ERROR_SHARING_VIOLATION):**檔案被佔用無法寫入**。
MSDN 說明:Bitmap 建構時鎖定檔案,直到 Dispose 才釋放。
Bitmap bmpTemp = new Bitmap(image);
Bitmap bmp = new Bitmap(bmpTemp); // 建立複本
bmpTemp.Dispose(); // 釋放檔案鎖定
bmp.Save(image, ImageFormat.Jpeg); // 可安全覆寫原檔
此「土辦法」廣泛用於圖片編輯器儲存功能。