首页 >后端开发 >C++ >为什么将图像转换为MemoryStream时会发生' GDI中发生通用错误”?

为什么将图像转换为MemoryStream时会发生' GDI中发生通用错误”?

Barbara Streisand
Barbara Streisand原创
2025-01-26 15:16:12867浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn