【问题标题】:WIC WINCODEC_ERR_BADHEADER only for JPEG imagesWIC WINCODEC_ERR_BADHEADER 仅适用于 JPEG 图像
【发布时间】:2012-10-07 07:34:45
【问题描述】:

我有一个使用 Windows Imaging Component API 的简单编码/解码应用程序。我遇到的问题是,当我使用 JPEGXR 或 BMP 格式时,一切正常。但是,当我使用 JPEG 编解码器时 - 编码器工作正常,我可以直观地验证生成的 JPEG 图像,但是当我尝试解码该流时,我得到一个 WINCODEC_ERR_BADHEADER (0x88982f61)

这是失败的那一行:

    hr = m_pFactory->CreateDecoderFromStream(
                                    pInputStream, 
                                    NULL,
                                    WICDecodeMetadataCacheOnDemand,
                                    &pDecoder);

这里的 pInputStream 是一个从字节数组创建的 IStream(编码器的输出 - 一个输出字节向量的黑盒)。

请帮忙!这让我发疯了!

【问题讨论】:

  • 所以可能正如它所暗示的那样是坏流?
  • 什么是“坏”流?当我将编码字节写入文件时,它呈现得非常好。而且我对 JPEGXR 和 BMP 使用完全相同的代码(仅更改了编码 GUID)
  • 也许你正在传递IStream,当前位置在流的末尾,或者在中间,而不是在JPEG文件的开头。
  • 当我觉得自己很愚蠢......就是这样。我添加了一个 seek 语句,现在很好!奇怪的是它是如何通过其他编解码器的。谢谢!

标签: c++ jpeg codec wic


【解决方案1】:

当将流作为参数传递时,请确保将其预先搜索到正确的初始位置(尤其是,如果您只是将数据写入其中并期望进一步检索,则将其重新搜索到开头)。 API 通常不需要寻找,因为这样它们可以让您在更大的流中间提供数据。

【讨论】:

    猜你喜欢
    • 2019-05-16
    • 2020-11-29
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多