【问题标题】:WPF application shows "Image format is unrecognized "WPF 应用程序显示“无法识别图像格式”
【发布时间】:2012-09-05 07:03:57
【问题描述】:

我有一个在 Windows 7 操作系统上运行良好的 WPF 应用程序。但是同一个应用程序在特定的少数 Windows XP 机器上崩溃。

它在少数 Windows XP 机器上运行良好。但在一些 XP 机器上它无法启动。

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

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

我是否应该更改用于应用程序的.ico ..

【问题讨论】:

    标签: wpf


    【解决方案1】:

    很遗憾,当您想要支持 Windows Vista、7、8 及更高版本的大图标尺寸时,简单地删除 256x256 应用程序并不是最佳解决方案。

    解决此问题的另一种方法...是不压缩图标中的 256x256 图像。请参阅此forum thread 了解更多信息。

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

    【讨论】:

    • 感谢这篇文章 (stackoverflow.com/questions/8971751/…),其中包含论坛链接的答案......这是最初的灵感/解决方案。
    • 压缩有很大的不同,我的图标从 39kb 变成了 288kb。
    • @tofutim,是的,这是正确的..但如果你想支持 Windows XP,这是必要的。
    【解决方案2】:

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

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

    【讨论】:

    • +1 很好的观察。你拯救了我的一天:)。这有助于我找出 16 位颜色的 RDP 会话导致我的应用程序崩溃,尽管我能够从具有 32 位颜色的 VNC 会话启动它。
    【解决方案3】:

    如果我没记错的话,Windows XP 不支持大于48x48 pixels 的图标,这可能是导致崩溃的原因。 .ico 文件绝对应该在两个系统上运行。

    您可以创建一个支持多种尺寸的图标,因此如果您在同一个文件中添加 48x48 和例如 256x256,您应该会很好。在制作支持多种尺寸的图标时,请务必使用选择好的软件制作图标。我使用了Greenfish Icon Editor,我认为它工作正常。但是还有很多其他产品可以做到这一点。

    请务必阅读The ICON handbook, section Windows,它包含有关要使用的图标大小和位深度的详细信息。


    SO 上的其他线程支持我的信念:

    problems with icon image

    Which icon sizes should my Windows application's icon include?

    【讨论】:

    • 感谢@Avada Kedavra .. 但它在少数机器上运行得非常好.. 它与分辨率有关吗?
    • 分辨率.. 听起来有些牵强。但我真的不知道。
    • 该错误的图标为 256X256.. 现在可以正常工作了.. 感谢您的链接.. 非常感谢..
    【解决方案4】:

    在您的 WPF 应用程序中,您至少有两个地方可以设置图标:

    1. 应用程序图标。这用于在资源管理器、桌面等中显示应用程序。您可以在项目属性中进行设置。
    2. 窗口图标。这用作窗口左上角的图标,也可能用于 alt-tabbing 和任务栏上。您将其设置为窗口上的 Icon 属性。

    通常,您可以在两种情况下使用相同的图标文件。但是,如果您有一个压缩的 256x256 图标作为窗口图标,那么这可能会在 Windows XP 中崩溃。这就是你正在经历的。另一方面,当应用程序图标具有压缩的 256x256 图标时,情况并非如此。

    所以另一个解决方案(我在所有项目中实现)是有两个图标:应用程序图标(包含所有尺寸)和一个特殊的“窗口图标”版本,它只包含尺寸 16x16 和 32x32(因为那些是唯一使用的尺寸)。

    【讨论】:

      【解决方案5】:

      另一个解决方法(16/32 位分辨率问题)不是在 XAML 中定义图标,而是在代码中加载它:

       this.Icon = new BitmapImage(new Uri("pack://application:,,,/UserInterface;component/Resources/Icons/ReportViewer.ico"));
      

      【讨论】:

        猜你喜欢
        • 2012-02-16
        • 1970-01-01
        • 2011-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-30
        • 2019-05-14
        相关资源
        最近更新 更多