Image.FromFile 因无效图像格式抛出 OutOfMemoryException:解释
尝试使用 Image.FromFile 加载图像时,开发人员可能会即使对于具有有效图像格式的文件也会遇到 OutOfMemoryException。这似乎违反直觉,从而引发了一个问题:为什么会故意针对无效图像格式抛出此异常。
答案在于 GDI 库的历史,该库是在 .NET 出现之前开发的。 GDI 的 C 实现依赖于错误代码而不是异常来报告问题。为了保持兼容性,GDI 的 .NET 包装器保留了此行为。
由于 C 的限制,可能的错误代码的数量受到限制。因此,GDI 仅定义了 20 个错误代码,不足以涵盖所有潜在的图像格式问题。此限制导致 OutOfMemory 错误代码过载,以表示真正的内存问题和图像文件格式的问题。
遇到无效的图像格式时,GDI 无法确定问题是否源于缺乏可用内存或图像文件中的数据损坏。因此,它将错误报告为 OutOfMemory。
为了提供更准确的错误处理,您可以将 Image.FromFile 调用包装在 try-catch 块中,并抛出更多上下文特定的异常,例如 FormatException ,如提供的代码所示:
public static Image OpenImage(string filename) { try { return Image.FromFile(filename); } catch (OutOfMemoryException ex) { throw new FormatException("The file does not have a valid image format.", ex); } }
通过处理 OutOfMemoryException 并提供更具描述性的异常,您可以改善用户体验并使其更容易找出并解决错误原因。
以上是为什么'Image.FromFile”会因无效图像格式抛出'OutOfMemoryException”?的详细内容。更多信息请关注PHP中文网其他相关文章!