首页 > 后端开发 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板