http://msdn.microsoft.com/zh-cn/library/windows/desktop/dd370987(v=vs.85).aspx

本主题介绍 Direct2D,这是 Windows 7 的全新二维图形 API。使用 Direct2D,Win32 开发人员可在执行二维图形呈现任务时获得出色的性能和视觉效果。

什么是 Direct2D?

Direct2D 是一种硬件加速的即时模式二维图形 API,可为二维几何对象、位图和文本提供高性能、高质量的呈现。Direct2D API 可与使用 GDI、GDI+ 或 Direct3D 的现有代码进行交互。

Direct2D 主要供以下几类开发人员使用:

  • 大型企业级本机应用程序开发人员。
  • 创建供下游开发人员使用的控件工具包和库的开发人员。
  • 需要对二维图形进行服务器端呈现的开发人员。
  • 使用 Direct3D 图形,并且需要在菜单、用户界面 (UI) 元素和抬头显示器 (HUD) 中使用高性能的简单二维和文本呈现的开发人员。

为什么使用 Direct2D?

在 Microsoft Windows 中开发出新二维图形 API 的主要目的包括:

  • 紧跟 Windows 用户所习惯的不断提高的丰富视觉体验。
  • 使开发人员能够编写出可随着运行代码的 PC 的图形处理硬件直接扩展的二维呈现代码。
  • 使开发人员能够编写出可在服务上下文中运行的二维图形呈现代码。

近年来,最终用户开始希望数字体验具备更好的视觉保真度。这种趋势在消费电子产品中得到反映。GPS 设备、媒体播放设备、移动电话和数码相机年复一年地不断实现更加丰富的体验。电影、电视、视频游戏和网站中各种各样的图形内容也反映了这种趋势。为了跟上这些变化,开发人员需要不断丰富现有 Windows 应用程序的视觉效果。

视频游戏图形和各种 Windows 体验(如 Windows Media Center 和 Aero)的发展,推动现代 Windows PC 中的图形处理器也得到了稳定的发展。有些 Windows 应用程序可以通过 Microsoft Direct3D 和 Windows Presentation Foundation (WPF) 来利用现代 GPU。尽管 Direct3D 可用于开发高端三维图形应用程序,WPF 可满足 .NET 开发人员的需要,但对于拥有基于 GDI 和 GDI+ 的呈现代码所构成的大型现有代码库的开发人员或要在其基于 Direct3D 的应用程序中加入高质量二维图形的开发人员而言,仍无法满足其要求。

最后,对于进行企业方案和网站开发方案的开发人员而言,需要可在服务中使用的图形 API。现有的呈现 API 侧重于单个用户会话中的客户端呈现。在服务上下文中使用时,它们无法满足稳定性和可伸缩性的要求。因此,需要新的 API 来解决这些问题。

高性能和最大可用性

Direct2D 是使用 Direct3D 10.1 API 构建的用户模式库。这意味着 Direct2D 应用程序可受益于现代主流 GPU 的硬件加速呈现。在更早的 Direct3D 9 硬件中,也可通过使用 Direct3D 10-level-9 呈现来实现硬件加速。此组合可在现有 Windows PC 的图形硬件上实现卓越的性能。

下图显示 Direct2D 的分层体系结构。

关于 Direct2D-LMLPHP

对于无法使用硬件加速的情况,Direct2D 提供了高性能软件光栅器。在软件中呈现时,与使用 GDI+ 并提供同等视觉质量的应用程序相比,使用 Direct2D 的应用程序可大幅提高呈现性能。该软件光栅器还可用在服务上下文中。

使用 Windows 7 操作系统中的远程桌面协议 (RDP) 基础结构也可以远程显示通过 Direct2D 呈现的内容。开发人员可以选择是通过显示计算机上的 GPU 来处理呈现,还是在本地呈现并作为位图来传送。可以根据要求的填充率以及所呈现的图形基元的质量来进行此选择。当显示计算机所运行的操作系统早于 Windows 7 时,将通过在网络中传送位图来执行远程显示呈现。

Direct2D 提供单个 API,该 API 既具有 Direct3D 的性能,又可通过软件回退、远程桌面和服务呈现等实现高可用性,使开发人员进行单一实现就可在很多不同方案中进行高性能呈现。

视觉质量

与使用 GDI 的应用程序相比,使用 Direct2D 处理图形的应用程序可实现更高的视觉质量。Direct2D 使用每基元抗锯齿功能,在呈现的内容中实现外观更为平滑的曲线和直线。在呈现二维基元时,也完全支持透明度和 Alpha 混合。下图对使用 GDI 呈现的锯齿内容(左)和 Direct2D 呈现的抗锯齿内容(右)进行了比较。

关于 Direct2D-LMLPHP

在需要的情况下,开发人员可以指定矢量图形的锯齿呈现。这些情况包括需要与硬像素边界(如指针或标尺等 UI 元素)对齐、必须匹配输出的 GDI 样式或者将在呈现过程的下游通过多重采样抗锯齿或其他一些机制执行抗锯齿。

互操作性

通过 GDI 与 Direct3D 的图面级互操作性,开发人员可以更方便地集成基于 Direct2D 的呈现。主要通过 GDI、GDI+ 或 Direct3D 呈现内容的应用程序可以先使用 Direct2D 呈现其应用程序的特定区域,经过一段时间再改用这样一种模型,即 Direct2D 主要用于执行呈现,GDI 主要用于插件或传统可扩展性。

通过 Direct2D,还可以方便地使用 DirectWrite 这一新的文本 API 以及 Microsoft Windows 图像处理组件 (WIC)(可能为英文网页)的高级图像处理功能。

有关 Direct2D 互操作性的详细信息,请参阅 Direct2D SDK 的互操作性部分。

小结

使用 Microsoft Direct2D,开发人员可在应用程序中构建二维图形功能,从而实现优于 GDI 的视觉质量和可随现代 GPU 扩展的性能特征。通过 Direct2D 互操作性模型,开发人员可以在进行基于 GDI、GDI+ 或 Direct3D 的呈现时有选择地迁移部分应用程序。

另请参见

Direct2D 入门
Direct2D API 概述
05-11 17:49