解码概述

本主题介绍位图解码器、核心 Windows 图像处理组件 (WIC) 编解码器组件,用于从流中解码图像文件。

本主题包含以下各节:

简介

位图解码器可以视为数字图像的外部容器,并提供对全局属性和图像帧的访问。 某些图像格式支持全局缩略图、预览、颜色上下文或元数据,而其他图像格式仅在帧级别提供这些属性。 但请注意,许多标准图像格式不支持这些全局属性。 因此,WIC 提供的许多本机编解码器实现不支持大多数这些全局属性。 有关全局属性支持的信息,请参阅本主题的本机位图解码器部分中的表。

在 WIC 中,位图解码器由 IWICBitmapDecoder 接口表示,并提供对位图的这些全局属性的访问,更重要的是,它包含的帧。 IWICBitmapFrameDecode 接口表示单个位图帧,位图源概述中对此进行了详细讨论。

本机位图解码器

WIC 为标准 Web 图像格式和高动态范围 HD 照片格式提供了 IWICBitmapDecoder 接口的多个本机实现。 下表列出了可用的本机解码器、类标识符名称和对全局属性的支持。 虽然功能可能不支持全局级别的属性(如缩略图),但图像格式可能在单个帧级别支持此类属性。

图像格式 CLSID 名称 缩略图 预览版 颜色上下文 元数据
BMP CLSID_WICBmpDecoder
GIF CLSID_WICGifDecoder
ICO CLSID_WICIcoDecoder
JPEG CLSID_WICJpegDecoder
PNG CLSID_WICPngDecoder
TIFF CLSID_WICTiffDecoder
高清照片 CLSID_WICWmpDecoder

 

创建位图解码器

若要使用 WIC 解码图像,首先需要为目标图像格式创建 IWICBitmapDecoder 的实例。 使用解码器实例可以访问全局属性和元数据(如果支持)以及图像帧。 WIC 映像工厂 IWICImagingFactory 提供了几种用于创建位图解码器的方法。 提供了以下工厂方法来创建位图解码器。

以下代码演示如何使用图像文件名创建位图解码器并检索图像的第一帧。

   // Create a decoder
   IWICBitmapDecoder *pDecoder = NULL;

   hr = m_pIWICFactory->CreateDecoderFromFilename(
       szFileName,                      // Image to be decoded
       NULL,                            // Do not prefer a particular vendor
       GENERIC_READ,                    // Desired read access to the file
       WICDecodeMetadataCacheOnDemand,  // Cache metadata when needed
       &pDecoder                        // Pointer to the decoder
       );

   // Retrieve the first frame of the image from the decoder
   IWICBitmapFrameDecode *pFrame = NULL;

   if (SUCCEEDED(hr))
   {
       hr = pDecoder->GetFrame(0, &pFrame);
   }

解码器扩展性

WIC 的核心功能之一是扩展性框架,使编解码器开发人员能够开发自己的图像编解码器,并获得与图像编解码器的本机实现相同的平台支持。 一组一致的接口用于所有图像处理,而不考虑图像格式。 安装编解码器后,任何使用 WIC 的应用程序都会自动支持新图像格式。 有关编解码器开发的详细信息,请参阅 组件开发中的主题。 有关解码器开发的详细信息,请参阅 实现WIC-Enabled解码器

概念性

Windows 映像组件概述

编码概述

组件开发