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 提供了高性能软件光栅器。在软件中呈现时,与使用 GDI+ 并提供同等视觉质量的应用程序相比,使用 Direct2D 的应用程序可大幅提高呈现性能。该软件光栅器还可用在服务上下文中。

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

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

视觉质量

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

在需要的情况下,开发人员可以指定矢量图形的锯齿呈现。这些情况包括需要与硬像素边界(如指针或标尺等 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 概述

关于 Direct2D的更多相关文章

  1. UWP中的Direct2D

    介绍 DirectX一直是Windows平台中高性能图形的代名词,自Win7开始,微软又推出了Direct2D技术,包装于Direct3D,但专注于2D图形,并且准备取代GDI这样的传统2D图形技术. ...

  2. Direct2D教程(外篇)环境配置

    2014年世界杯首场淘汰赛马上开始了,闲着没事,整理以前的博客草稿打发时间,意外的发现这篇文章,本来是打算加入到Direct2D那个系列的,不知道为什么把它给遗漏了.环境配置,对于熟手来说,不是什么重 ...

  3. Direct2D开发:纹理混合

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 我们都知道Direct2D可以加载并显示图片,但是不知道你有没有想过,这个2D的图形引擎可以进行纹理混合吗?如果 ...

  4. Direct2D开发:从资源加载位图

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct2D使用Windows图像处理组件 (WIC) 来加载位图.从文件加载位图的方法很简单,而且网上的教 ...

  5. Direct2D开发:绘制网格

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.引言 最近在使用Direct2D进行绘制工作中,需要实现使用Direct2D绘制网格的功能.在网上查了很多资料,终于实 ...

  6. 使用DirectWrite测量Direct2D文字大小

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 最近在使用Direct2D和DirectWrite写引擎,在引擎中需要实现文本标签控件.但是文本标签的尺寸最好不 ...

  7. SharpDX之Direct2D教程II——加载位图文件和保存位图文件

    本系列文章目录: SharpDX之Direct2D教程I——简单示例和Color(颜色) 绘制位图是绘制操作的不可缺少的一部分.在Direct2D中绘制位图,必须先利用WIC组件将位图加载到内存中,再 ...

  8. 在 WinForm 中使用 Direct2D

    在 C# 的 WinForm 应用中,界面的绘制使用的是 GDI+.不过在一些特别的应用中,可能需要用硬件加速来提高绘制的效率.下面就来介绍两种在 WinForm 应用中嵌入 Direct2D 的方法 ...

  9. C# 使用 Direct2D 实现斜角效果

    Direct2D 是微软新的二维图形 API,可为二维几何图形.位图和文本提供高性能和高质量的呈现.Direct2D 支持硬件加速,无论是绘制速度还是绘制质量,Direct2D 都要比 GDI 和 G ...

随机推荐

  1. The Swift Programming Language 中文翻译版(个人翻新随时跟新)

    The Swift Programming Language --lkvt 本人在2014年6月3日(北京时间)凌晨起来通过网络观看2014年WWDC 苹果公司的发布会有iOS8以及OS X 10.1 ...

  2. Shell脚本检测文件夹是否已被挂载的方法

    方法1: if grep -qs '/mnt/foo' /proc/mounts; then echo "It's mounted." else echo "It's n ...

  3. Android之ProgressBar初步应用

    这里利用 ProgressBar 即时显示下载进度. 途中碰到的问题: 1.主线程中不能打开 URL,和只能在主线程中使用 Toast 等 2.子线程不能修改 UI 3.允许网络协议 4.暂停下载和继 ...

  4. Linux IO漫谈

    本文为原创,转载请注明:http://www.cnblogs.com/gistao/ Background IO可能是我们接触最频繁的系统调用,比如printf到终端,send content到对端, ...

  5. appium +python 一个简单的例子

    appium 安装和python 安装好后. 1.      启动android模拟器--Genymotion-点击Start 2.      启动appium 3.     运行代码. # -*- ...

  6. SolidWorks的简单介绍及基本用法

    写这博客的动机来源于构建之法微信群里面的的一位老师.sw是一个强大的机械设计制图软件,我记得大一的时候学制图学的3d软件是inventor,而后发现sw用起来更方便更高效,于是就自学了sw,由于是自学 ...

  7. POJ 2251 BFS(简单)

    一道三维的BFS Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 24003 Accepted: 9 ...

  8. AT指令(转)

    资料来自网络 附录AT指令简编一. 一般命令1.AT+CGMI 给出模块厂商的标识.2.AT+CGMM 获得模块标识.这个命令用来得到支持的频带(GSM 900,DCS 1800 或PCS 1900) ...

  9. java return

    return语句的作用: 1.返回一个值,可以是任意类型的 2.使程序返回到操作系统,或者说是代表"已经做完,离开此方法" ---------------------------- ...

  10. Win8.1离线安装.NET3.5

    Win8.1离线安装.NET3.5 dism.exe /online /enable-feature /featurename:NetFX3 /Source:H:\sources\sxs 其中H为盘符 ...