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

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

查看日志文件,我看到他们得到“图像格式无法识别”exception(引起:HRESULTexception:0x88982F07)。

我已经搜索了错误,我发现这似乎是WPF无法在Windows XP上加载Vista PNG图标。 但是那些报告已经有几年了,当然微软现在已经解决了这个问题(?),在我的情况下,它在大多数XP安装上运行良好。 我真的不想限制更新的Windows上的图标外观。

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

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

我今天遇到了同样的错误,只是在我的开发机器上。 WPF实现似乎仍然是错误的。

如果我理解这一点( 文章 ),它可以在任何地方读取ICO文件。 在我的例子中,它是在XAML中为主应用程序窗口设置图标时:

 

上面的代码突然失败了,但是使用PNG文件解决了这个问题:

  

今天早上我对这个问题有点乐趣。 事实certificate,错误仅发生在颜色设置为16位的XP机器上,当我将其更改为32位时,问题神奇地消失了。

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

这个问题让我脱掉了很长一段时间,我花了很长时间试图弄清楚发生了什么,所以我会分享我的结论,因为它可能会帮助别人(甚至可能在将来我自己) ):

  • 此问题主要出现在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文件用于此目的)

  • 最好的答案 – 以及我最终做的事情 – 是约阿希姆在他对OP问题的评论中所说的:

https://social.msdn.microsoft.com/Forums/vstudio/en-US/9e723d51-0e26-4609-8fe1-5e0edcf7385b/setting-windowicon-to-vista-256×256-png-icon-causes-a-fileformatexception? forum = wpf似乎表明如果你不压缩图标它会自行解决。 – 约阿希姆·伊萨克森 于12月44日12:44开始

所以我在icoFx(我用于我的图标编辑)中查找并确定:

icoFx中的选项窗口

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

问题解决了