我有一个字节流pBitmap
,我需要从中创建一个解码器。所以我尝试了如下
IWICStream *piStream = NULL;
IWICBitmapDecoder *piDecoder = NULL;
//piFactory is my IWICImagingFactory
hr = piFactory->CreateStream(&piStream);
//lRawSize is bufferSize
//pBitmap is my byte buffer
hr = piStream ->InitializeFromMemory(pBitmap, lRawSize);
hr = piFactory->CreateDecoder(GUID_ContainerFormatJpeg,NULL,&piDecoder);
//HERE i got the error.
hr = piDecoder->Initialize(piStream, WICDecodeMetadataCacheOnDemand);
hr返回未找到的组件。 这可能是什么问题。
更新:
我不确定我打算解码的位图源是否是jpg。所以我可以理解将容器格式传递为" GUID_ContainerFormatJpeg"是不正确的。
所以我尝试了IWICImagingFactory::CreateDecoderFromStream
hr = piFactory->CreateDecoderFromStream(
piStream,
NULL,
WICDecodeMetadataCacheOnDemand,
&piDecoder
);
但结果是一样的。 我从文件中启动流。这很好。
hr = piStream ->InitializeFromFilename(L"C..\\test.jpg",GENERIC_READ);
所以问题应该在启动流时。
我创建了一个编码器并做了一些stuf并使用writepixel
将它们保存到文件中(不创建解码器)
hr = piBitmapFrame->WritePixels(
lHeight,
cbStride,
cbBufferSize,
pBitmap);
它可以保存精美的图像。所以可以说pBitmap肯定包含图像数据。
这可能是什么问题。
答案 0 :(得分:0)
错误的原因在于使用指向不同对象的指针。 piStreamTemp
已从位图数组初始化,但piDecoder
使用piStream
初始化,该文件为空且未正确初始化。
此外,here建议避免使用方法InitializeFromMemory,并为此进行解决。