2013-07-17 2 views
1

Я использую WIC для кодирования нескольких изображений в формате JPEGXR. Случайно, моя программа регистрирует ошибку для последнего LogAssert в следующем фрагменте моей функции Encode.Что вызывает IWICBitmapFrameEncode :: SetPixelFormat, чтобы вернуть формат, отличный от запрошенного?

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); 
} 

Я проверил файл дампа и, кажется возвращаемый formatGUID является 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

ответ

0

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

Смежные вопросы