使用WIC加载图像时,能否获取人类可读的图像格式名称?
如何从WIC的
IWICBitmapDecoder获取人类可读的图像格式名称? 我正在使用IWICImagingFactory::CreateDecoderFromFilename通过Windows Imaging Component (WIC)加载图像,它会返回IWICBitmapDecoder,我可借此获取实际图像数据。请问是否还能从WIC获取已加载图像的人类可读格式字符串?例如“JPEG”“PNG”“GIF”等?
我知道可以使用IWICBitmapDecoder::GetContainerFormat获取容器格式,但它返回的是GUID而非人类可读字符串,比如GIF格式会返回GUID_ContainerFormatGif,这并不直观。
可以通过建立GUID与人类可读格式名的映射表来实现——WIC本身没有直接提供将容器格式GUID转换为友好名称的API,所以最直接的方式是自行维护对应关系:
- 调用
IWICBitmapDecoder::GetContainerFormat获取目标格式的GUID - 将获取到的GUID与预定义的映射表匹配,返回对应的可读名称
示例代码(C++)
#include <wincodec.h> #include <string> std::string GetWICFormatName(const GUID& formatGuid) { if (formatGuid == GUID_ContainerFormatBmp) return "BMP"; if (formatGuid == GUID_ContainerFormatPng) return "PNG"; if (formatGuid == GUID_ContainerFormatJpeg) return "JPEG"; if (formatGuid == GUID_ContainerFormatGif) return "GIF"; if (formatGuid == GUID_ContainerFormatTiff) return "TIFF"; if (formatGuid == GUID_ContainerFormatWmp) return "WMPhoto"; // 根据需求添加更多WIC支持的格式 return "Unknown"; } // 使用示例 IWICBitmapDecoder* pDecoder = nullptr; // ... 完成decoder初始化的代码 ... GUID containerFormat; HRESULT hr = pDecoder->GetContainerFormat(&containerFormat); if (SUCCEEDED(hr)) { std::string formatName = GetWICFormatName(containerFormat); // 处理获取到的格式名称 }
如果需要支持更多小众格式,可以参考WIC官方文档中定义的所有容器格式GUID,逐个补充到映射表中。这种方法简单直接,性能优异,因为是直接的GUID对比,无需额外系统调用。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

