将图像保存到 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中文网其他相关文章!