將圖像保存到 MemoryStream 時出現 GDI“一般錯誤”:解決方案
使用 GDI 將 JPG 或 GIF 圖像轉換為 MemoryStream
有時會引發神秘的“GDI 中發生一般錯誤”異常。 這通常發生在image.Save()
期間。根本原因往往是過早關閉MemoryStream
。
關鍵是要確保MemoryStream
在整個圖像保存過程中保持打開狀態。 圖像是從流創建的,保存需要持續訪問。
考慮這個有問題的代碼片段:
<code class="language-csharp">using (var m = new MemoryStream()) { dst.Save(m, format); var img = Image.FromStream(m); // MemoryStream 'm' is closed here! img.Save("C:\test.jpg"); // This often fails. return img; }</code>
MemoryStream
m
在使用 img
之前被丟棄,導致 GDI 錯誤。
解決方案很簡單:保持流打開,直到圖像完全處理完畢。 這是更正後的代碼:
<code class="language-csharp">using (var m = new MemoryStream()) { dst.Save(m, format); m.Seek(0, SeekOrigin.Begin); // Rewind the stream var img = Image.FromStream(m); img.Save("C:\test.jpg"); // This should now work. return img; }</code>
通過使用m.Seek(0, SeekOrigin.Begin)
,我們將流的位置重置到開頭,允許Image.FromStream
訪問保存的圖像數據。 using
語句確保在成功處理並返回圖像後正確處理 MemoryStream
。 這可以防止資源洩漏並解決 GDI 中的“通用錯誤”。
以上是為什麼將圖像轉換為MemoryStream時會發生' GDI中發生通用錯誤”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!