“图像格式无法识别”取决于显示器

Posted

技术标签:

【中文标题】“图像格式无法识别”取决于显示器【英文标题】:"The image format is unrecognized" depending on monitor 【发布时间】:2012-02-16 19:25:38 【问题描述】:

我们有一个 C# WPF 项目(.NET 4.0,Visual Studio 2010)。它已经在 Windows XP 和 Windows 7 上进行了测试,似乎工作正常,但现在我收到了来自现场的两个客户(由于某种原因都位于西班牙)的报告,他们无法启动该软件。

查看日志文件,我看到他们收到“图像格式无法识别”异常(原因:HRESULT 异常:0x88982F07)。

我用谷歌搜索了这个错误,我发现这似乎是 WPF 无法在 Windows XP 上加载 Vista PNG 图标。但是这些报告已经有几年的历史了,微软现在肯定已经解决了(?),就我而言,它在大多数 XP 安装上都可以正常工作。我真的不想在更新的 Windows 上限制图标的外观。

我们的应用程序最常用于笔记本电脑,其中一位用户报告说,当他将笔记本电脑连接到外接显示器时,问题得到了解决。当我让另一个人测试同样的东西时,他得到了同样的结果。

所以我的问题是:你知道微软是否已经解决了这个问题吗?您知道为什么它只发生在某些 Windows XP 实例上以及它与显示器的关系吗?最重要的是,您知道在不更改图标的情况下我可以做些什么来使我们的应用程序更健壮吗?

【问题讨论】:

social.msdn.microsoft.com/Forums/en-US/wpf/thread/… 似乎表明如果您不压缩图标,它将自行解决。 感谢您的提示,我将对其进行测试。我创建了未压缩的图标,图标文件变大了 5 倍,但现在这不是问题(除非未压缩图标还有其他缺点?)。 除了我知道的尺寸之外没有其他缺点。 @JoachimIsaksson 您的评论正是我的问题。感谢发帖! @Joachim:你应该把你的评论作为答案,这实际上是这个问题的最佳答案 【参考方案1】:

我今天遇到了同样的错误,出乎意料,而且只在我的开发机器上。 WPF 实现似乎仍然存在问题。

如果我理解这一点 (article) 是正确的,它可能会在任何读取 ICO 文件的地方发生。在我的情况下,它是在 XAML 中为主应用程序窗口设置图标时:

<Window x:Class="MyApp.MainWindow"  Icon="Dashboard.ico" >

上述代码突然失败,但使用PNG文件解决了问题:

<Window x:Class="MyApp.MainWindow"  Icon="Dashboard.png" >

【讨论】:

【参考方案2】:

今天早上我对这个问题感到很开心。原来,这个错误只发生在颜色设置为 16 位的 XP 机器上,当我将其更改为 32 位时,问题就神奇地消失了。

这适用于 XP(包括嵌入式)SP3。

【讨论】:

【参考方案3】:

这个问题让我很长一段时间都没有头发,我花了很长时间试图弄清楚发生了什么,所以我会分享我的结论,因为它可能会帮助其他人(甚至可能是我自己未来):

此问题主要出现在 Windows XP 和/或通过远程桌面连接时(尤其是在 Windows 服务器上)。但这有点随机,不可能故意复制

这些链接提供了很好的解释以及解决方案/解决方法: http://code.logos.com/blog/2008/08/image_format_error_when_loading_from_a_stream.html https://github.com/LogosBible/Logos.Utility/blob/master/src/Logos.Utility/IO/RebasedStream.cs

直接使用 png 文件可以,但它有其局限性(例如,我使用 .ico 文件以便根据显示图标的大小拥有多个图像,而 .png 文件不能替换.ico 文件)

最好的答案 - 以及我最终做的 - 是 Joachim 在他对 OP 问题的评论中所说的:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/9e723d51-0e26-4609-8fe1-5e0edcf7385b/setting-windowicon-to-vista-256x256-png-icon-causes-a-fileformatexception?forum=wpf 似乎表明如果您不压缩图标,它将自行解决。 – Joachim Isaksson 2012 年 1 月 23 日 12:44

所以我在 icoFx 中查找(用于编辑图标),果然:

我只是取消选中此选项并再次保存了我的 .ico(在此过程中大小从 30Kb 增加到 286Kb!)瞧!

问题解决了

【讨论】:

以上是关于“图像格式无法识别”取决于显示器的主要内容,如果未能解决你的问题,请参考以下文章

插入 HTML Libre Office

识别GSM加密算法

识别和非识别关系之间有什么区别?

为啥 Linux 下无法识别第二显示器

手机USB插入电脑后电脑无法识别

ABBYY FineReader出现错误和警告提示的解决办法