首页 > 解决方案 > 使用 WIC(Windows 映像组件)遇到的问题

问题描述

最近,我使用 WIC 来解析 GIF。代码写好了,在win10和win7上都能完美运行,但是在WinXP上就失败了。排除了半天,终于在这行代码上找到了原因:

// pBitmapFrameDecode is an IWICBitmapFrameDecode
hr = pBitmapFrameDecode->GetMetadataQueryReader(&pFrameMetadataQueryReader);
if (hr == WINCODEC_ERR_UNSUPPORTEDOPERATION) MessageBoxA(NULL, "WINCODEC_ERR_UNSUPPORTEDOPERATION", "Error!", MB_OK);

在这行代码中,GetMetadataQueryReader失败了,导致GetMetadataByName下面的代码失败。我觉得很奇怪,所以我查阅了 MSDN。 IWICBitmapFrameDecode::GetMetadataQueryReader

但是我发现我的 XP 电脑符合 MSDN 中写的最低配置要求(SP3)。更奇怪的是函数返回WINCODEC_ERR_UNSUPPORTEDOPERATION。太奇怪了。起初,我以为是我自己的设备问题,所以我借了几台 XP 电脑,在上面运行我的代码。他们都回来了WINCODEC_ERR_UNSUPPORTEDOPERATION。MSDN错了吗?

标签: c++cwindowswinapiwic

解决方案


MSDN 没有“错误”,但有些不完整。

大多数 WIC 通常只是您的代码和解码器/编码器(编解码器,特定于给定文件格式)之间的中介。

XP 上支持 GetMetadataQueryReader 的事实并不意味着 XP 上的给定编解码器支持与其他 Windows 版本上的相同编解码器具有相同级别的元数据。图像元数据可能非常复杂和深入(并且可以及时改进规范)。

如果您访问此 MSDN 页面:Windows 7 的新增功能,您将阅读以下内容:

对 JPEG、PNG 和 GIF 的扩展元数据支持:

在 Windows 7 中,WIC 扩展了对 JPEG、PNG 和 GIF 图像的元数据支持。

  • 添加了对动画 GIF 和 GIF 属性的支持。

因此,这可能意味着您正在触摸具有不受支持的元数据属性的 GIF 文件,在 XP(Vista 或 7)之后添加了对这些属性的支持。


推荐阅读