Проблемы, возникающие при использовании WIC (компонент Windows для работы с образами)

Недавно я использовал WIC для разбора GIF. Код был написан, и он отлично работает на win10 и win7, но не работает на WinXP. Я долго исключал это и, наконец, нашел причину в этой строке кода:

// pBitmapFrameDecode is an IWICBitmapFrameDecode
hr = pBitmapFrameDecode->GetMetadataQueryReader(&pFrameMetadataQueryReader);
if (hr == WINCODEC_ERR_UNSUPPORTEDOPERATION) MessageBoxA(NULL, "WINCODEC_ERR_UNSUPPORTEDOPERATION", "Error!", MB_OK);

В этой строке кода ошибка GetMetadataQueryReader приводит к ошибке GetMetadataByName в следующем коде. Я чувствовал себя очень странно, поэтому я проверил MSDN. IWICBitmapFrameDecode::GetMetadataQueryReader

Но я обнаружил, что мой компьютер с XP соответствует минимальным требованиям к конфигурации (SP3), написанным в MSDN. Что еще более странно, функция возвращает WINCODEC_ERR_UNSUPPORTEDOPERATION. Это так странно. Сначала я подумал, что это проблема моего собственного устройства, поэтому я одолжил несколько компьютеров с XP и запустил на них свой код. Все они возвращают WINCODEC_ERR_UNSUPPORTEDOPERATION. Ошибка MSDN?


person ULTRON19    schedule 07.03.2020    source источник
comment
Мы не видим вызов CoInitializeEx(). Это имеет большое значение, WIC стал бесплатным на Win7. stackoverflow.com/help/minimal-reproducible-example   -  person Hans Passant    schedule 07.03.2020
comment
Прекратите писать код для XP. Пусть умрет.   -  person Jonathan Potter    schedule 08.03.2020


Ответы (1)


MSDN не ошибается, но несколько неполна.

Большая часть WIC часто является просто посредником между вашим кодом и декодером/кодировщиком (кодеком, специфичным для данного формата файла).

Тот факт, что GetMetadataQueryReader поддерживается в XP, не означает, что данный кодек в XP поддерживает метаданные того же уровня, что и тот же кодек в других версиях Windows. Метаданные изображений могут быть довольно сложными и глубокими (и спецификации могут быть улучшены со временем).

Если вы перейдете на эту страницу MSDN: Что нового в Windows 7 вы прочтете это:

Расширенная поддержка метаданных для JPEG, PNG и GIF:

В Windows 7 WIC расширил поддержку метаданных для изображений JPEG, PNG и GIF.

  • Добавлена ​​поддержка анимированных GIF и свойств GIF.

Таким образом, это, вероятно, означает, что вы касаетесь файлов GIF с неподдерживаемыми свойствами метаданных, поддержка которых была добавлена ​​после XP (Vista или 7).

person Simon Mourier    schedule 07.03.2020