Windows Imaging Component 基础知识

Windows Imaging Component (WIC) 是一个用于图像编码、解码和操控的可扩展框架,支持多种图像格式。本文介绍了如何使用 WIC 解码和编码图像,包括创建解码器和编码器,以及如何利用 WIC 图像工厂和流进行操作。WIC 适用于 C++ 本机应用程序,同时也支持 .NET Framework 中的 WPF。示例代码展示了如何将图标复制到多帧 TIFF 图像。
摘要由CSDN通过智能技术生成

来自网络:http://dev.21tx.com/2009/02/09/14033.html

 

目录

  入门

  解码图像

  编码图像

  WIC 图像工厂

  使用流

  通过 WPF 使用 WIC

  下一步是什么?

  Microsoft® Windows® Imaging Component (WIC) 是用于编码、解码和操控图像的可扩展框架。WIC 最初是为 Windows Vista® 和 Windows Presentation Foundation (WPF) 而设计的,但现在,不仅 Windows Vista 和 Microsoft .net Framework 3.0 及更高版本附带此框架,而且它还是 Windows XP 和 Windows Server® 2003 的一个下载项,可供于本机应用程序使用。

  作为支持 WPF 的多个功能强大的本机框架之一,本文中所说的 WIC 是用于实现 System.Windows.Media.Imaging 命名空间的框架。但是,它也非常适合于以 C++ 编写的本机应用程序,因为它提供了通过一组 COM 接口呈现的简单但功能强大的 API。

  WIC 使用一组可扩展的图像编解码器支持多种图像格式。每个编解码器支持一种不同的图像格式,并且通常同时提供编码器和解码器。WIC 包括用于所有主要图像格式的一组内置编解码器,这些格式包括 PNG、JPEG、GIF、TIFF、HD Photo (HDP)、ICO,当然还有 Windows BMP。

  HDP 可能是唯一您没有听过的格式。它最初称为 Windows Media Photo 且是配合 Windows Vista 开发的,用于克服现有格式的一些限制并提供更好的性能和更高的图像质量。如需有关 HDP 的更多信息,请查看 microsoft.com/whdc/xps/wmphoto.mspx 上的规范。幸运地是,WIC 可很好地支持这一新图像格式,因此应用程序不必知道格式的具体细节即可使用它们。

  本月,我将向您展示如何使用 WIC 来编码和解码不同的图像格式以及其间的多项事宜。下一次,我将讲述一些更高级的功能,并向您展示如何使用自己的图像编解码器来扩展 WIC。

  入门

  WIC API 包含 COM 接口、函数、结构和错误代码,以及标识各种编解码器、容器和格式的 GUID。需要的所有声明均包括在 wincodec.h 和 wincodecsdk.h 头文件中,这些文件是 Windows SDK 的一部分(Visual Studio® 2008 中附带这些文件)。您还必须链接到 WindowsCodecs.lib 库,该库提供了您可能需要的各种定义。可将以下代码添加到项目的预编译头文件中以使其完全可用:

#include <wincodec.h>
#include <wincodecsdk.h>
#pragma comment(lib, "WindowsCodecs.lib")

  由于 WIC API 主要包含的是 COM 接口,因此我使用活动模板库 (ATL) CComPtr 类来处理接口指针的创建和管理。如果要执行相同的操作,还需包括定义 CComPtr 模板类的 atlbase.h 头文件:

#include <atlbase.h>

  WIC API 还使用 COM 库,因此使用此 API 的任何线程均必须调用 CoInitializeEx 函数。

  最后,WIC API 使用 HRESULT 来描述错误。本文中的示例使用 HR 宏来清晰地识别方法在何处返回需要检查的 HRESULT。可将它替换为自己的错误处理策略—由它引发异常或是您自己返回 HRESULT。

  解码图像

  解码器由 IWICBitmapDecoder 接口表示。WIC 提供了多种用于创建解码器对象的方法,但可仅使用特定解码器的 CLSID 来创建一个实例。以下示例为 TIFF 图像创建了一个解码器:

CComPtr<IWICBitmapDecoder> decoder;
HR(decoder.CoCreateInstance(CLSID_WICTiffDecoder));

  图 1 列出了 WIC 所包含的编解码器以及可用于创建不同解码器的 CLSID。创建完解码器后,需使用包含像素和可选元数据(它们使用解码器可理解的格式)的流对其进行初始化:

借助 C++ 进行 Windows 开发: Windows Imaging Component 基础知识Figure1内置 WIC 编解码器的 CLSID

 

格式 解码器 编码器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值