首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HEIF图像解码C++

HEIF图像解码C++
EN

Stack Overflow用户
提问于 2020-10-10 15:14:07
回答 2查看 1K关注 0票数 2

Windows成像组件用于解码heif图像。然而,微软商店的额外应用程序(heif图像分机,hevc视频分机)是成功解码图像的必要条件。

没有它们,WIC api将返回空白图像。现在,我希望能够通过编程确定heif文件是否可以被正确解码。

我试图使用WIC_HEIF_Decoder. (假定为DXVA检查器 )来定位所需解码器类型的存在。但我在任何地方都找不到注册。

但是,有一个GUID密钥,但是CLSID_WICHeifDecoder记录了这里,我认为即使缺少解码器,也可以在系统中注册它。

有人知道怎么做吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-12 18:11:44

由于HEIF解码器仍然在Windows上被识别,无法对它们进行解码,这是最好的攻击,海事组织:

为了解码HEIF图像,应该在机器上安装HEVC视频分机。因此,正确的检查是查看是否有与HEVC输入匹配的解码类型。

代码语言:javascript
复制
MFStartup(MF_VERSION);
IMFActivate** activate {};
unsigned int count {};
// Set the HEVC GUID
MFT_REGISTER_TYPE_INFO input;
input.guidMajorType = MFMediaType_Video;
input.guidSubtype = MFVideoFormat_HEVC;
// Get all available output types for HEVC input
MFTEnumEx(MFT_CATEGORY_VIDEO_DECODER, MFT_ENUM_FLAG_SORTANDFILTER | MFT_ENUM_FLAG_SYNCMFT, &input, nullptr, &activate, &count);
// Release interface pointers
for (size_t i = 0; i < count; i++) {
    activate[i]->Release();
}
CoTaskMemFree(activate);
MFShutdown();
return (count > 0);
票数 1
EN

Stack Overflow用户

发布于 2020-10-10 15:28:31

如果您计划使用WIC解码器,您应该使用WIC API来检查可用性,而不是Media Foundation API,即使这两个解码器目前都被打包在一起并属于同一个Windows Store应用程序(扩展)。

您应该能够使用IWICImagingFactory::CreateComponentEnumerator来枚举解码器,并确定HEIF是否在可用的解码器中。

微软HEIF解码器

  • 类标识符: CLSID_WICHeifDecoder
  • 签署状态: WICComponentSigned
  • 作者:微软
  • 供应商标识符:{F0E749CA-EDEF-4589-A73A-EE0E626A2A2B}
  • 版本: 1.0.0.0
  • 规范版本: 1.0.0.0
  • 友好名称: Microsoft HEIF解码器
  • IWICBitmapCodecInfo:
    • 容器格式: GUID_ContainerFormatHeif
    • 像素格式: GUID_WICPixelFormat32bppBGR
    • 色彩管理版本: 1.0.0.0
    • MIME类型:图像/heic、图像/heif、图像/avci、图像/heic-序列、图像/heif序列、图像/avc、图像/avif、图像/avif序列。
    • 文件扩展名:.heic,.heif,.avci,.heics,.heifs,.avcs,.avif,.avifs
    • 模式: 576

您可能更喜欢将IWICImagingFactory::CreateDecoderGUID_ContainerFormatHeif结合使用,因为您应该对解码能力更感兴趣,而不是在特定的解码器实现中。

使用注册表查询或直接CoCreateInstance调用来检查特定的CLSID非常简单,但对于指定的任务却没有多大意义。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64294983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档