GDI JPEG 到 MemoryStream 转换错误:常见陷阱
本文解决了使用 GDI 将 JPEG 图像保存到 MemoryStream
时经常遇到的“通用 GDI 错误”。 虽然 PNG 可能可以完美运行,但 JPEG 经常会触发此异常。
问题: 在对 MemoryStream
进行 JPEG 保存操作期间发生错误,即令人沮丧的“通用 GDI 错误”。
根本原因:问题在于MemoryStream
的生命周期管理。 在整个图像处理过程中,流必须保持打开状态,包括 Save
操作。
解决方案:关键是保持MemoryStream
的打开状态。 这是更正后的代码片段:
<code class="language-csharp">using (var m = new MemoryStream()) { dst.Save(m, format); // Save to MemoryStream // Create a new Image from the MemoryStream (optional, depending on your needs) using (var img = Image.FromStream(m)) { img.Save("C:\test.jpg"); // Save to file (optional) var bytes = PhotoEditor.ConvertImageToByteArray(img); //Convert to byte array (optional) return img; // Return the Image object } }</code>
通过在 MemoryStream
块中保持 using
打开,直到不再需要 Image
对象,必要的资源仍然可以访问,从而防止错误。
解释: 确切的原因尚不清楚,但很可能 Image
对象维护了对原始 MemoryStream
的内部引用。过早关闭流会使该引用无效,从而导致 Save
操作期间出现 GDI 错误。
重要注意事项:
MemoryStream
保持打开状态,直到所有图像操作完成。Image
对象的方法(例如 ResizingFirstOrDefault
),请考虑首先保存到临时文件或另一个流,然后从保存的数据创建新的 Image
对象。此方法可确保 GDI 应用程序中可靠的 JPEG 处理。
以上是为什么除非流保持打开状态,否则为什么将JPEG保存到GDI中的内存流中丢弃'通用错误”?的详细内容。更多信息请关注PHP中文网其他相关文章!