Windows 图形体系结构概述

Windows 为图形提供了多个 C++/COM API。 下图显示了这些 API。

显示 Windows 图形 API 的示意图。

  • 图形设备接口 (GDI) 是 Windows 的原始图形接口。 GDI 首先针对 16 位 Windows 编写,然后针对 32 位和 64 位 Windows 进行了更新。
  • GDI+ 作为 GDI 的后续版本在 Windows XP 中引入。 GDI+ 库是通过包装平面 C 函数的一组 C++ 类访问的。 .NET Framework还在 System.Drawing 命名空间中提供 GDI+ 的托管版本。
  • Direct3D 支持三维图形。
  • Direct2D 是适用于二维图形的新式 API,是 GDI 和 GDI+ 的继任者。
  • DirectWrite是文本布局和光栅化引擎。 可以使用 GDI 或 Direct2D 绘制光栅化文本。
  • DirectX 图形基础结构 (DXGI) 执行低级别任务,例如为输出演示帧。 大多数应用程序不直接使用 DXGI。 相反,它充当图形驱动程序和 Direct3D 之间的中间层。

Windows 7 中引入了 Direct2D 和 DirectWrite。 它们也通过平台更新适用于 Windows Vista 和 Windows Server 2008。 有关详细信息,请参阅 适用于 Windows Vista 的平台更新

Direct2D 是本模块的重点。 虽然 Windows 中仍支持 GDI 和 GDI+,但建议将 Direct2D 和 DirectWrite 用于新程序。 在某些情况下,混合技术可能更实用。 对于这些情况,Direct2D 和 DirectWrite 旨在与 GDI 互操作。

后续部分介绍 Direct2D 的一些优点。

硬件加速

术语 硬件加速 是指图形处理单元 (GPU) (而不是 CPU)执行的图形计算。 新式 GPU 针对呈现图形中使用的计算类型进行高度优化。 通常,从 CPU 移动到 GPU 的此工作越多越好。

虽然 GDI 支持某些操作的硬件加速,但许多 GDI 操作绑定到 CPU。 Direct2D 分层在 Direct3D 之上,并充分利用 GPU 提供的硬件加速。 如果 GPU 不支持 Direct2D 所需的功能,则 Direct2D 回退到软件呈现。 总体而言,Direct2D 在大多数情况下优于 GDI 和 GDI+。

透明度和抗锯齿

Direct2D 支持完全硬件加速的 alpha 混合 (透明度) 。

GDI 对 alpha 混合的支持有限。 尽管 GDI 在 bitblt 操作期间支持 alpha 混合,但大多数 GDI 函数不支持 alpha 混合。 GDI+ 支持透明度,但 alpha 混合由 CPU 执行,因此它不会受益于硬件加速。

硬件加速 alpha 混合还支持抗锯齿。 别名 是连续函数采样引起的项目。 例如,当曲线转换为像素时,别名可能会导致锯齿状外观。 任何减少别名导致的项目的技术都被视为一种抗锯齿形式。 在图形中,抗锯齿是通过将边缘与背景混合来完成的。 例如,下面是一个由 GDI 绘制的圆和由 Direct2D 绘制的同一个圆。

direct2d 中抗锯齿技术的插图。

下一张图像显示了每个圆圈的详细信息。

上一个图像的详细信息。

GDI (左) 绘制的圆由与曲线近似的黑色像素组成。 Direct2D (右) 绘制的圆使用混合来创建更平滑的曲线。

GDI 在) 绘制几何图形 (直线和曲线时不支持抗锯齿。 GDI 可以使用 ClearType 绘制抗锯齿文本;但否则,GDI 文本也具有别名。 文本的别名尤其明显,因为交错的线条会破坏字体设计,使文本的可读性降低。 尽管 GDI+ 支持抗锯齿,但它由 CPU 应用,因此性能不如 Direct2D 好。

矢量图形

Direct2D 支持 矢量图形。 在矢量图形中,数学公式用于表示线条和曲线。 这些公式不依赖于屏幕分辨率,因此可以缩放到任意尺寸。 当必须缩放图像以支持不同的监视器大小或屏幕分辨率时,矢量图形特别有用。

下一步

桌面窗口管理器