You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WIC加载图像时,能否获取人类可读的图像格式名称?

如何从WIC的IWICBitmapDecoder获取人类可读的图像格式名称?

我正在使用IWICImagingFactory::CreateDecoderFromFilename通过Windows Imaging Component (WIC)加载图像,它会返回IWICBitmapDecoder,我可借此获取实际图像数据。请问是否还能从WIC获取已加载图像的人类可读格式字符串?例如“JPEG”“PNG”“GIF”等?

我知道可以使用IWICBitmapDecoder::GetContainerFormat获取容器格式,但它返回的是GUID而非人类可读字符串,比如GIF格式会返回GUID_ContainerFormatGif,这并不直观。


可以通过建立GUID与人类可读格式名的映射表来实现——WIC本身没有直接提供将容器格式GUID转换为友好名称的API,所以最直接的方式是自行维护对应关系:

  1. 调用IWICBitmapDecoder::GetContainerFormat获取目标格式的GUID
  2. 将获取到的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:55:25