首頁 > 後端開發 > C++ > 為什麼將圖像轉換為MemoryStream時會發生' GDI中發生通用錯誤”?

為什麼將圖像轉換為MemoryStream時會發生' GDI中發生通用錯誤”?

Barbara Streisand
發布: 2025-01-26 15:16:12
原創
775 人瀏覽過

Why Does

將圖像保存到 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板