저는 WIC를 사용하여 여러 이미지를 JPEGXR 형식으로 인코딩했습니다. 때때로 내 프로그램은 다음 Encode 함수 스 니펫에 마지막 LogAssert에 대한 오류를 기록합니다. 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 것 같다.
나는 다음과 같은 질문이 있습니다
가와 setPixel 형식이 다른 버전을 반환하지를? 다른 GUID를 반환 할 수있는 요인은 무엇입니까?
저는 항상 JPEGXR로 인코딩하며 항상 동일한 속성을 적용합니다. 왜 SetPixelFormat의 동작이 비 결정적입니까? 항상 성공해야합니까, 아니면 항상 GUID_WICPixelFormat24bppRGB를 반환해야합니까?
RGB 형식이 지원되는 경우 BGR이 지원되지 않는 이유는 무엇입니까? 그것은 단지 순서대로 변화 한 것입니다.
내 코드는 여기에 예제의 도움으로 작성되었습니다 :이 SetPixelFormat에 대한 동시 통화에서 발생할 수있는 문제입니다
http://msdn.microsoft.com/en-us/library/windows/desktop/ee719871(v=vs.85).aspx