最近,我使用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错了吗?
发布于 2020-03-07 19:43:07
MSDN不是“错误的”,但有点不完整。
大多数WIC通常只是代码和解码器/编码器(编解码器,特定于给定的文件格式)之间的中介。
XP上支持GetMetadataQueryReader的事实并不意味着XP上的给定编解码器支持与其他Windows版本上的相同编解码器相同级别的元数据。图像元数据可能非常复杂和深刻(规范可以随着时间的推移而改进)。
如果你访问这个MSDN页面:What's new for Windows 7,你会看到:
对
、PNG和GIF的扩展元数据支持:
在Windows 7中,WIC扩展了对JPEG、PNG和GIF图像的元数据支持。
因此,这可能意味着您正在访问具有不受支持的元数据属性的GIF文件,这些属性是在XP (Vista或7)之后添加的支持。
https://stackoverflow.com/questions/60576960
复制相似问题