WIC 中的新增功能

Windows 映像组件 (WIC) 已更新为新版本的 Windows。 本主题提供对这些新功能的快速介绍。

Windows 10版本 1507 的新增功能

访问用于 WIC 解码和编码的低级别 JPEG 数据

从 Windows 10 版本 1507 开始,WIC 提供对低级别 JPEG 数据结构(包括 Huffman 和量化表)的访问。 有关详情,请参阅以下主题:

JPEG 索引编制

JPEG 索引是一种技术,可显著提高随机访问大型 JPEG 映像的小型子区域的性能,但代价是占用一些额外的内存。 WIC 的任何调用方都可以利用 JPEG 索引编制。

ID2D1ImageSourceFromWic 接口旨在利用 JPEG 索引(如果已启用)。 例如,ID2D1ImageSource API 将仅在大分辨率图像的平移和缩放等方案中请求图像的所需部分。 有关详情,请参阅以下主题:

Windows 8.1 的新增功能

支持 JPEG YCbCr 映像

从 Windows 8.1 开始,WIC 支持以本机格式解码、转换和编码 JPEG Y'CbCr 图像数据。 这允许应用在使用 Y'CbCr 编码的 JPEG 时显著减少某些图像处理操作的处理时间和内存消耗。 有关详情,请参阅以下主题:

支持块压缩格式 (DDS 文件)

从 Windows 8.1 开始,WIC 添加了一个新的编解码器,它支持采用以下格式编码的 DDS 图像:DXGI_FORMAT_BC1_UNORM、DXGI_FORMAT_BC2_UNORM和DXGI_FORMAT_BC3_UNORM。 可以使用标准 WIC 接口以解码形式访问 DDS 块压缩数据,也可以使用新的 DDS 特定接口直接访问。 有关详情,请参阅以下主题:

Windows 8 的新增功能

在 Windows 8 中,WIC 已更新了多项新功能。 Windows 7 和 Windows Server 2008 R2 上也通过适用于 Windows 7 的平台更新(可通过适用于 Windows 7 的平台更新获取)获取 WIC 的更新版本。

改进了 Direct2D 集成

Windows 8 中的 WIC 提供以下 API 来改进 Direct2D 与 WIC 的集成:

对 BMP 编解码器 alpha 支持的更改

Windows 8 中的 WIC 支持将 BITMAPV5HEADER 图像文件加载为 WICPixelFormat32bppBGRA 格式的图像。 此外,BMP 编码器支持新的布尔值编码器选项“EnableV5Header32bppBGRA”,该选项指示编码器使用 32bppBGRA 图像数据编写 BITMAPV5HEADER

有关 BMP 格式的详细信息,请参阅 BMP 格式概述

新的像素格式

Windows 8 中的 WIC 定义了以下新的像素格式:

  • GUID_WICPixelFormat32bppRGB
  • GUID_WICPixelFormat64bppRGB
  • GUID_WICPixelFormat96bppRGBFloat
  • GUID_WICPixelFormat64bppPRGBAHalf

注意

TIFF 内置编解码器将返回GUID_WICPixelFormat96bppRGBFloat数据。 内置编解码器不使用其他三种格式。

 

AppContainer 中组件扩展性的限制

在 AppContainer 进程(包括所有 Windows 应用商店应用)中运行时,WIC 将仅使用 Windows 提供的组件,而不管系统上是否安装了其他组件。 未在 AppContainer 中运行的应用不受影响。

应用无需进行任何代码更改,在 AppContainger 中运行,但 WICComponentEnumerateOptions 标志和供应商 GUID 参数将不起作用。 如果 Windows 提供的编解码器无法解码图像,WIC 将无法加载图像,并且调用 CreateComponentEnumerator 方法将仅返回 Windows 提供的组件。

对 CLSID_WICPngDecoder 和 PNG 解码器颜色上下文支持的更改

已使用与 CLSID_WICPngDecoder 相同的 GUID 添加 CLSID_WICPngDecoder1,并且已添加 CLSID_WICPngDecoder2

针对 Windows 8 SDK 编译时,CLSID_WICPngDecoder#defined CLSID_WICPngDecoder2,以便使用新的 PNG 解码器行为来提升新编译的应用。 应用应继续指定 CLSID_WICPngDecoder

指定 CLSID_WICPngDecoder2 将创建 WIC PNG 解码器的一个版本,该版本将从 cHRM 和 gAMA 区块生成 IWICColorContext 。 这允许将此颜色空间元数据与其他 Windows API 一起使用,以便管理源图像的颜色。 如果存在 iCCP 区块、存在 sRGB 区块或 gAMA 和 cHRM 区块指示 sRGB 颜色空间,则不会从 gAMA 和 cHRM 区块生成 IWICColorContext

应用可以指定 CLSID_WICPngDecoder1 来创建不从 gAMA 和 cHRM 区块生成 IWICColorContext 的 WIC PNG 解码器版本。 这与早期版本的 Windows 中的 PNG 解码器的行为匹配。

对WINCODEC_SDK_VERSION的更改

针对 Windows 8 SDK 进行编译时,WINCODEC_SDK_VERSION#defined WINCODEC_SDK_VERSION2,以便使用新的 PNG 解码器行为来提升新编译的应用。 否则,#defined WINCODEC_SDK_VERSION1。 应用应继续指定 WINCODEC_SDK_VERSION

调用 WICCreateImagingFactory_Proxy 创建映像工厂时指定 WINCODEC_SDK_VERSION 会导致创建 CLSID_WICPngDecoder2而不是从CreateDecoder 方法及其变体CLSID_WICPngDecoder1。 此外,解码器组件信息枚举器将返回 CLSID_WICPngDecoder2 组件信息,但不 返回CLSID_WICPngDecoder1 信息。

在上述情况下,指定 WINCODEC_SDK_VERSION1 将导致使用 CLSID_WICPngDecoder1 而不是 CLSID_WICPngDecoder2

对CLSID_WICImagingFactory的更改

使用与 CLSID_WICImagingFactory 相同的 GUID 添加 CLSID_WICImagingFactory1,并且已添加 CLSID_WICImagingFactory2

针对 Windows 8 SDK 进行编译时,CLSID_WICImagingFactory#defined CLSID_WICImagingFactory2,以便使用新的 PNG 解码器行为来提升新编译的应用。 应用应继续指定 CLSID_WICImagingFactory

调用 CoCreateInstance 创建映像工厂时指定CLSID_WICImagingFactory2会导致创建CLSID_WICPngDecoder2,而不是从 CreateDecoder 方法及其变体CLSID_WICPngDecoder1。 此外,解码器组件信息枚举器将返回 CLSID_WICPngDecoder2 组件信息,但不 返回CLSID_WICPngDecoder1 信息。

在上述情况下,指定 CLSID_WICImagingFactory1 将导致使用 CLSID_WICPngDecoder1 而不是 CLSID_WICPngDecoder2

Windows 7 的新增功能

在 Windows 7 中,WIC 已更新了多项新功能。 本主题提供对这些新功能的快速介绍。

汇报 TIFF 编解码器

Windows 7 的 WIC TIFF 编解码器已更新,以支持以前版本的 WIC 不支持的多项功能。

  • 支持大型 TIFF 文件。
  • 解码平铺的 TIFF 图像。
  • 解码平面 (平面) TIFF 图像。
  • 解码 JPEG 编码的 TIFF 图像。

渐进式解码

渐进式解码提供在整个图像完成下载之前以增量方式解码和呈现图像部分的功能。 此功能极大地改善了从 Internet 查看图像时的用户体验,因为用户无需等待整个图像下载,解码即可开始。 使用渐进式解码,用户可以在下载整个图像之前很久看到包含可用数据的图像预览。 此功能对于用于查看来自 Internet 或带宽受限的数据源的图像的任何应用程序都至关重要。

有关详细信息,请参阅 渐进式解码概述

对 JPEG、PNG 和 GIF 的扩展元数据支持

在 Windows 7 中,WIC 扩展了对 JPEG、PNG 和 GIF 图像的元数据支持。

  • 添加了对动态 GIF 和 GIF 属性的支持。
  • 扩展的 JPG 元数据处理程序支持色度、亮度和注释元数据。
  • 扩展的 PNG 元数据处理程序支持 tIME、sRGB、iCCP、hIST、cHRM、iTXt、bKGD 和 gAMA 元数据。
  • 为 ResolutionInfo 元数据和 IPTC 摘要元数据添加了新的 8BIM 元数据处理程序。
  • 为逻辑屏幕描述符 (LSD) 、图像描述符 (IMD) 、图形控制扩展 (GCE) 和应用程序扩展添加了新的元数据处理程序, (APE) 元数据。
  • 支持跨 APPn 块的元数据。

多线程单元支持

MTA 中任意数量的线程可以同时调用多线程单元 (MTA) 中的对象,从而在多核系统和某些服务器方案中实现更好的性能。 此外,位于 MTA 中的 WIC 编解码器可以调用 MTA 中的其他对象,而无需在不同 STA 单元中的线程之间调用相关的封送处理成本。 在 Windows 7 中,所有内置 WIC 编解码器都已更新为支持 MTA,包括 JPEG、TIFF、PNG、GIF、ICO 和 BMP。 强烈建议编写编解码器以支持 MTA。 由于封送处理,不支持 MTA 的编解码器将导致多线程应用程序中的性能大幅下降。 启用 MTA 支持需要在编解码器中实现正确的同步。 这些同步技术的确切实现超出了本文的范围。 下面提供了有关将组件对象模型 (COM) 对象同步的常规参考。

元数据工作组实现

目前有各种元数据存储格式包含重叠属性,没有任何明确的行业标准或有关读取和写入这些元数据格式的一致方法的指导。 为了帮助处理这种各种格式和属性,元数据工作组 (MWG) 已成立。 MWG 的目的是提供准则,确保各种平台、应用程序和设备之间的互操作性。 MWG 建立的准则适用于 XMP、Exif 和 IPTC 元数据字段,以及 JPEG、TIFF 和 PSD 图像格式。

在 Windows 7 中,照片元数据处理程序和元数据策略层已更新为根据 MWG 建立的准则读取和写入图像元数据。 有关元数据工作组 (MWG) 的详细信息,请查看 已建立的元数据准则

Windows Vista 和 Windows Server 2008 支持的 Windows 7 功能

适用于 Windows Vista 的平台更新是一组运行时库,使开发人员能够将应用程序同时面向 Windows 7 和 Windows Vista。 适用于 Windows Server 2008 的平台更新是一组运行时库,使开发人员能够将应用程序同时面向 Windows Server 2008 R2 和 Windows Server 2008。 Windows Vista 平台更新和适用于 Windows Server 2008 的平台更新将通过Windows 更新提供给所有 Windows Vista 和 Windows Server 2008 客户。 需要 Windows Vista 平台更新或 Windows Server 2008 平台更新的第三方应用程序可以Windows 更新检测是否安装了所需的更新;如果没有安装,Windows 更新将在后台下载并安装它。 有关这两个更新的详细信息,请参阅适用于 Windows Vista 的平台更新