0

我有一个字节流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);

所以问题应该出在启动流中。

我创建了一个编码器并做了一些事情并将它们保存到一个文件中writepixel(不创建解码器)

hr = piBitmapFrame->WritePixels(
    lHeight, 
    cbStride, 
    cbBufferSize, 
    pBitmap);

它可以保存精美的图像。所以我可以说 pBitmap 肯定包含图像数据。

这里可能是什么问题。

4

1 回答 1

0

错误的原因是使用指向不同对象的指针。piStreamTemp是从位图数组初始化的,但piDecoder使用piStream它初始化是空的并且没有正确初始化。

此外,这里建议避免使用 InitializeFromMemory 方法,并且已经描述了解决方法。

于 2015-04-15T12:03:08.777 回答