为了账号安全,请及时绑定邮箱和手机立即绑定

是否有一个原因Image.FromFile为无效的图像格式抛出OutOfMemory

是否有一个原因Image.FromFile为无效的图像格式抛出OutOfMemory

C#
湖上湖 2019-09-06 15:46:36
我正在编写捕获此代码的代码OutOfMemoryException并抛出一个新的,更直观的异常:/// .../// <exception cref="FormatException">The file does not have a valid image format.</exception>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出于特殊原因故意被抛出?
查看完整描述

3 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

嗯,这是一个很好的例子,说明异常并不总是意味着什么。 这个特殊情况(OutOfMemoryException对于一个无效的文件)可以追溯到.Net 1.0,它有一组更有限的异常类型,这个库的程序员可以从中选择。我认为从那以后它没有被改变以保持向后兼容性(又名“在糟糕的情况下抛出好钱”)。


公平地说,我认为这是他们本可以做出的异常类型最糟糕的选择。当你打开一个文件,它碰巧很大,并且你得到了一个文件时,OutOfMemoryException假设你实际上已经没有内存并且在错误的树上咆哮一段时间是合乎逻辑的(在StackOverflow上有关于这个问题的不止一个问题) 。


查看完整回答
反对 回复 2019-09-06
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

这是一个误导性的例外。微软说:

当您尝试在.NET Framework 1.0中使用Bitmap.FromFile方法时收到“System.OutOfMemoryException”错误消息

使用Bitmap.FromFile方法时,可能会出现此问题,并且满足下列条件之一:

  • 图像文件已损坏。

  • 图像文件不完整。

注意如果您的应用程序尝试在未完成写入文件的文件流上使用Bitmap.FromFile方法,则可能会遇到此问题。*图像文件没有有效的图像格式,或者GDI +不支持文件的像素格式。*该程序无权访问该图像文件。* BackgroundImage属性直接从Bitmap.FromFile方法设置。

(位图来自Image)

当然,当您尝试加载太大的图像时,也可能会出现此异常。所以你需要考虑这一点。


查看完整回答
反对 回复 2019-09-06
  • 3 回答
  • 0 关注
  • 948 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信