11
votes

I have a WPF application which runs fine on Windows 7 OS. But the same app crashes on a particular few Windows XP machines.

It runs fine on few windows XP machine. but on a few XP machine it fails to start.

ERROR - Image format is unrecognized.

I know this question has been asked few times. but my problem is i am still not able to figure out as to how to resolve this.

Should I change the .ico used for the application ..

5

5 Answers

10
votes

Unfortunately, simply removing the 256x256 application isn't the greatest solution when you want to support the large icon size for Windows Vista, 7, 8 and forward.

Another way to solve this problem ... is to not compress the 256x256 image in the icon. See this forum thread for more info.

How does one do that? Well, most icon utilities will have an option for this (as this is a common problem). I use IcoFX and below you can see the option (highlighted in red) I needed to clear.

IcoFX Screenshot

7
votes

I've had a bit of fun with this problem this morning. It turned out that the error was occurring only on XP machines where the colour settings were set to 16 bit, and when I changed it to 32-bit the problem magically disappeared.

This goes for XP (including Embedded) SP3.

3
votes

If I remember correctly Windows XP does not support icons larger than 48x48 pixels and this could be the reason for the crash. .ico files should definitely run on both systems.

You can create an icon that support multiple sizes, so if you add 48x48 and for example 256x256 in the same file you should be good. Also be sure to use select a good software to produce the icon when making icons that support multiple sized. I've used Greenfish Icon Editor which I think works fine. But there are multitudes of other products for this.

Be sure to read The ICON handbook, section Windows, it contains good info about what icon sizes and bit depths to use.


Other threads on SO supports my belief:

problems with icon image

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

3
votes

In your WPF application you will have at least two places to set icons:

  1. The application icon. This is used for displaying the application in Explorer, desktop, etc. You set this in the project properties.
  2. The window icon. This is used as icon in the upper-left corner of the window, and perhaps for alt-tabbing and on the taskbar. You set this as the Icon property on the window.

Often, you may use the same icon file in both cases. However, if you have a compressed 256x256 icon as window icon, then this can crash in Windows XP. This is what you are experiencing. On the other hand, this not the case when the application icon has a compressed 256x256 icon.

So another solution (which I implemented in all my projects) is to have two icons: The application icon (which contains all sizes) and a special "window icon" version, which only contains the sizes 16x16 and 32x32 (since those are the only sizes which are used).

1
votes

Another workaround to (16/32bit resolution problem) is not to define icon in XAML, but load it in code:

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