我正在使用 Windows 图像处理组件库对大量图像进行编码。理想情况下,我想使用某些属性设置一次编码器,然后为我的所有图像重新使用该编码器。但是,在我看到的所有示例中,似乎为单个图像创建了一个编码器。
我正在读取和写入字节流,而不是文件,并且可能有多个线程同时运行。
这是一段代码:
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:这段代码的哪些部分可以做一次,哪些部分需要针对不同的图像重复?所有的初始化似乎都相互关联。