Windows Imaging Componentライブラリを使用して、多数の画像をエンコードしています。理想的には、特定のプロパティを使用してエンコーダーを一度セットアップしてから、そのエンコーダーをすべての画像に再利用したいと思います。しかし、私が見たすべての例では、エンコーダーは単一の画像用に作成されているようです。
ファイルではなくバイトストリームとの間で読み取りと書き込みを行っているため、複数のスレッドが同時に実行されている可能性があります。
コードのスニペットは次のとおりです。
CComPtr<IWICBitmapEncoder> pEncoder;
CComPtr<IWICBitmapFrameEncode> pBitmapFrame;
CComPtr<IPropertyBag2> pPropertyBag;
CComPtr<IWICStream> pStream;
CComPtr<IStream> pOutputStream;
HRESULT hr;
// Setup memory stream, which is needed to stage raw image bits
if (CreateStreamOnHGlobal(NULL, TRUE, &pOutputStream) != S_OK)
{
LogAssert(false, "Could not create pOutputStream. Err (%d)", GetLastError());
}
//Setup WIC stream which encapsulates the output stream
hr = m_pFactory->CreateStream(&pStream);
hr = pStream->InitializeFromIStream(pOutputStream);
hr = m_pFactory->CreateEncoder(GUID_ContainerFormatWmp, NULL, &pEncoder);
hr = pEncoder->Initialize(pStream, WICBitmapEncoderNoCache);
hr = pEncoder->CreateNewFrame(&pBitmapFrame, &pPropertyBag);
SetEncodingProperties(pPropertyBag);
hr = pBitmapFrame->Initialize(pPropertyBag);
問題1:CreateStreamOnHGlobalを使用して作成されたIStreamに書き込みを行っています。複数の画像pStream
に再利用できますか?pOutputStream
スレッドセーフの問題はありますか?
問題2:このスニペットのどの部分を一度実行できますか?また、異なる画像に対してどの部分を繰り返す必要がありますか?すべての初期化は互いに結びついているようです。