Почему IWICBitmapFrameEncode :: SetPixelFormat возвращает формат, отличный от запрошенного?

Я использую WIC для кодирования нескольких изображений в формат JPEGXR.
Иногда моя программа регистрирует ошибку для последнего LogAssert в следующем фрагменте моей функции Encode.

hr = m_pFactory->CreateEncoder(GUID_ContainerFormatWmp, NULL, &pEncoder);
LogAssert(SUCCEEDED(hr),"Failed to create encoder. Err: 0x%x", hr);

hr = pEncoder->Initialize(pOutputStream, WICBitmapEncoderNoCache);
LogAssert(SUCCEEDED(hr),"Failed to initialize encoder. Err: 0x%x", hr);

hr = pEncoder->CreateNewFrame(&pBitmapFrame, &pPropertyBag);
LogAssert(SUCCEEDED(hr),"Encoder failed to create new frame. Err: 0x%x", hr);

SetEncodingProperties(pPropertyBag);

hr = pBitmapFrame->Initialize(pPropertyBag);
LogAssert(SUCCEEDED(hr),"Failed to initialize pBitmapFrame with the given properties. Err: 0x%x", hr);

hr = pBitmapFrame->SetSize(rawWidth, rawHeight);
LogAssert(SUCCEEDED(hr),"Failed to set bitmap size. Err: 0x%x", hr);

WICPixelFormatGUID formatGUID = GUID_WICPixelFormat24bppBGR;
hr = pBitmapFrame->SetPixelFormat(&formatGUID);
if(FAILED(hr) || !IsEqualGUID(formatGUID, GUID_WICPixelFormat24bppBGR))
{
LogAssert(false,"Failed to set pixel format to GUID_WICPixelFormat24bppBGR. Err: 0x%x", hr);
}

Я проверил файл дампа, и кажется, что возвращенный формат GUID GUID_WICPixelFormat24bpp RGB.

У меня есть следующие вопросы:

  1. Когда формат SetPixel возвращает другую версию? Какие факторы могут заставить его вернуть другой GUID?

  2. Я всегда кодирую в JPEGXR и всегда применяю одни и те же свойства. Почему поведение SetPixelFormat недетерминировано? Разве это не должно всегда либо успешно выполняться, либо всегда возвращать GUID_WICPixelFormat24bppRGB?

  3. Если поддерживается формат RGB, почему нет BGR? Это просто изменение в порядке.

Мой код был написан с помощью примеров здесь:

http://msdn.microsoft.com/en-us/library/windows/desktop/ee719871(v=vs.85).aspx

1

Решение

Это проблема, которая может возникнуть при одновременных вызовах SetPixelFormat. Я слышал, это будет исправлено в Windows 8.1.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]