IWICBitmapDecoder :: Initialize()失败

时间:2015-04-14 02:54:15

标签: c++ wic

我有一个字节流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肯定包含图像数据。

这可能是什么问题。

1 个答案:

答案 0 :(得分:0)

错误的原因在于使用指向不同对象的指针。 piStreamTemp已从位图数组初始化,但piDecoder使用piStream初始化,该文件为空且未正确初始化。

此外,here建议避免使用方法InitializeFromMemory,并为此进行解决。