1

WIC を使用して、複数の画像を JPEGXR 形式にエンコードしています。ときどき、私のプログラムは、次の Encode 関数のスニペットの最後の LogAssert のエラーをログに記録します。

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

4

1 に答える 1

0

これは、SetPixelFormat への同時呼び出しで発生する可能性がある問題です。Windows 8.1 で修正されると聞きました。

于 2013-08-28T20:32:10.870 に答える