"Формат изображения непризнан" в зависимости от монитора

У нас есть проект С# WPF (.NET 4.0, Visual Studio 2010). Он был протестирован как на Windows XP, так и на Windows 7, и, похоже, работает нормально, но теперь я получил отчеты от двух клиентов на поле (оба по некоторым причинам находятся в Испании), которые не могут запустить программное обеспечение.

Посмотрев на файл журнала, я вижу, что они получают исключение "Формат изображения непризнанным" (вызвано: Исключение из HRESULT: 0x88982F07).

У меня есть ошибка в googled, и я обнаружил, что это похоже на то, что WPF не загружает значок Vista PNG в Windows XP. Но эти отчеты пару лет, конечно, Microsoft разрешила это к настоящему времени (?), И в моем случае он отлично работает на большинстве установок XP. Я действительно не хочу ограничивать внешний вид значка на более поздних Windows.

Наиболее распространенное использование нашего приложения - на ноутбуках, и один из пользователей сообщил, что когда он подключил свой ноутбук к внешнему монитору, проблема была решена. И когда я попросил другого испытать то же самое, у него был тот же результат.

Итак, мои вопросы: вы знаете, была ли эта проблема решена Microsoft? Вы знаете, почему это происходит только на некоторых экземплярах Windows XP и как это связано с монитором? И что самое главное, знаете ли вы, что я могу сделать, чтобы сделать наше приложение более устойчивым к этому без изменения значка?

Ответ 1

Сегодня у меня была такая же ошибка, что и я, и только на моей машине разработки. По-видимому, реализация WPF по-прежнему не работает.

Если я это понимаю (статья), это может произойти везде, где читаются ICO файлы. В моем случае это было при установке значка для главного окна приложения в XAML:

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

Вышеупомянутый код неожиданно завершился, но с использованием файла PNG была решена проблема:

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

Ответ 2

Сегодня утром мне было очень весело с этой проблемой. Оказалось, что ошибка произошла только на машинах XP, где настройки цвета были установлены на 16 бит, а когда я изменил ее на 32-разрядную, проблема волшебным образом исчезла.

Это относится к XP (включая Embedded) 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 для этой цели)

  • лучший ответ - и то, что я закончил делать, - это то, что Йоахим сказал в своем комментарии к вопросу о 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кажется, что он решит себя, если вы не сжимаете значок. - Иоахим Исакссон Янв 23 '12 в 12:44

поэтому я искал в icoFx (который я использую для редактирования значков) и достаточно уверен:

окно параметров в icoFx

Я просто снял флажок и снова сохранил мой .ico(размер от 30Kb до 286Kb в этом процессе!) и voilà!

проблема решена