WPF 应用程序显示“图像格式不被识别”

11

我有一个WPF应用程序,在Windows 7操作系统上运行良好。但是同样的应用程序在某些Windows XP机器上崩溃。

它在一些Windows XP机器上正常运行,但在一些XP机器上无法启动。

错误 - 图像格式无法识别。

我知道这个问题已经被问过几次,但我的问题是我仍然无法弄清楚如何解决这个问题。

我应该更改用于应用程序的.ico吗?

5个回答

10

很不幸,仅仅删除256x256应用程序并不是在想要支持Windows Vista,7,8和更高版本的大图标尺寸时最好的解决方案。

另一种解决方法是......不压缩图标中的256x256图像。有关详细信息,请参见此论坛帖子

如何做到这一点? 大多数图标实用程序都会有此选项(因为这是一个常见问题)。 我使用IcoFX,下面您可以看到我需要清除的选项(以红色突出显示)。

IcoFX Screenshot


感谢这篇文章(https://dev59.com/_2ox5IYBdhLWcg3wyHPc),其中有一个带有论坛链接的答案……这是最初的灵感/解决方案。 - cplotts
1
压缩处理会带来很大的差异,我的图标从39kb变成了288kb。 - tofutim
@tofutim,是的,那是正确的...但如果你想支持Windows XP,那是必要的。 - cplotts

7

今天早上我为这个问题烦恼了一会儿。结果发现错误只在颜色设置为16位的XP机器上发生,当我将其更改为32位时,问题神奇地消失了。

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


+1 很好的观察。你救了我的一天 :) 。这帮助我弄清楚,使用 16 位颜色的 RDP 会导致我的应用程序崩溃,尽管我能够从具有 32 位颜色的 VNC 会话中启动它。 - kiran

4
在WPF应用程序中,您至少有两个地方可以设置图标:
  1. 应用程序图标。这用于在资源管理器、桌面等处显示应用程序。您可以在项目属性中设置此项。
  2. 窗口图标。这用作窗口左上角的图标,也可能用于alt-tab和任务栏上。您可以将其设置为窗口的图标属性。
通常情况下,您可以在两种情况下使用相同的图标文件。然而,如果您在窗口图标中使用了压缩的256x256图标,则在Windows XP中可能会出现崩溃。这就是您目前遇到的问题。另一方面,当应用程序图标具有压缩的256x256图标时,情况并非如此。
因此,另一种解决方案(我在所有项目中都实施的)是拥有两个图标:应用程序图标(包含所有大小)和一个特殊的“窗口图标”版本,它仅包含大小为16x16和32x32(因为这些是唯一使用的大小)。

3

如果我没记错,Windows XP不支持大于48x48像素的图标,这可能是崩溃的原因。.ico文件肯定可以在两个系统上运行。

你可以创建支持多个尺寸的图标,因此如果将48x48和256x256添加到同一个文件中,您应该可以解决问题。还要确保在制作支持多个大小的图标时选择一款好的软件。我用过Greenfish Icon Editor,我认为它很好用。但有许多其他产品也可以使用。

一定要阅读ICON手册,Windows部分,其中包含有关要使用的图标尺寸和位深度的良好信息。


其他SO上的帖子支持我的观点:

图标图片存在问题

Windows应用程序应包含哪些图标尺寸?


谢谢@Avada Kedavra..但是在一些机器上它运行得非常好..这与分辨率有关吗? - Sandepku
分辨率...听起来有些牵强,但我并不确定。 - Avada Kedavra
这个程序的问题出在一个256X256像素的图标上,现在已经修复了。感谢提供的链接,非常感激。 - Sandepku

1
另一个解决(16/32位分辨率问题)的方法是不在XAML中定义图标,而是在代码中加载它:
 this.Icon = new BitmapImage(new Uri("pack://application:,,,/UserInterface;component/Resources/Icons/ReportViewer.ico"));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接