关于 Direct2D
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的更多相关文章
- UWP中的Direct2D
介绍 DirectX一直是Windows平台中高性能图形的代名词,自Win7开始,微软又推出了Direct2D技术,包装于Direct3D,但专注于2D图形,并且准备取代GDI这样的传统2D图形技术. ...
- Direct2D教程(外篇)环境配置
2014年世界杯首场淘汰赛马上开始了,闲着没事,整理以前的博客草稿打发时间,意外的发现这篇文章,本来是打算加入到Direct2D那个系列的,不知道为什么把它给遗漏了.环境配置,对于熟手来说,不是什么重 ...
- Direct2D开发:纹理混合
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 我们都知道Direct2D可以加载并显示图片,但是不知道你有没有想过,这个2D的图形引擎可以进行纹理混合吗?如果 ...
- Direct2D开发:从资源加载位图
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct2D使用Windows图像处理组件 (WIC) 来加载位图.从文件加载位图的方法很简单,而且网上的教 ...
- Direct2D开发:绘制网格
转载请注明出处:http://www.cnblogs.com/Ray1024 一.引言 最近在使用Direct2D进行绘制工作中,需要实现使用Direct2D绘制网格的功能.在网上查了很多资料,终于实 ...
- 使用DirectWrite测量Direct2D文字大小
转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 最近在使用Direct2D和DirectWrite写引擎,在引擎中需要实现文本标签控件.但是文本标签的尺寸最好不 ...
- SharpDX之Direct2D教程II——加载位图文件和保存位图文件
本系列文章目录: SharpDX之Direct2D教程I——简单示例和Color(颜色) 绘制位图是绘制操作的不可缺少的一部分.在Direct2D中绘制位图,必须先利用WIC组件将位图加载到内存中,再 ...
- 在 WinForm 中使用 Direct2D
在 C# 的 WinForm 应用中,界面的绘制使用的是 GDI+.不过在一些特别的应用中,可能需要用硬件加速来提高绘制的效率.下面就来介绍两种在 WinForm 应用中嵌入 Direct2D 的方法 ...
- C# 使用 Direct2D 实现斜角效果
Direct2D 是微软新的二维图形 API,可为二维几何图形.位图和文本提供高性能和高质量的呈现.Direct2D 支持硬件加速,无论是绘制速度还是绘制质量,Direct2D 都要比 GDI 和 G ...
随机推荐
- c#读写文件
1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出. byte[] byData = ...
- (进阶篇)PHP+Mysql+jQuery找回密码
通常所说的密码找回功能不是真的能把忘记的密码找回,因为我们的密码是加密保存的,一般开发者会在验证用户信息后通过程序生成一个新密码或者生成一个特定的链接并发送邮件到用户邮箱,用户从邮箱链接到网站的重置密 ...
- 基于Maven site的穷人的本地知识管理系统
1 Motivation On daily study or development, a simple knowledge management system is required. In the ...
- Spring可以将简单的组件配置
这次听了老师的课程,觉得还是需要更加集中的去把各种题进行一个分类吧,然后有针对的去准备,虽然据说这一块在面试中也不容易考到,但是毕竟是难点,还是需要好好准备一下的.因为在dp这个方面,我算是一个比较新 ...
- Bootstrap模态框(MVC)
BZ这篇博客主要是为大家介绍一下MVC如何弹出模态框.本文如果有什么不对的地方,希望大神们多多指教,也希望和我一样的小菜多多学习.BZ在这里谢过各位. 首先要在页面加上一个点击事件: @Html.Ac ...
- R 在linux redhat 6.5的编译安装过程
下载源码包 在http://cran.r-project.org/mirrors.html,选择一个国内镜像下载需要的版本,比如:http://mirror.lzu.edu.cn/CRAN/src/b ...
- java封装性之private
public class TestDemo{ public static void main(String args[]){ Person perA= new Person(); perA.setNa ...
- Makefile简易教程
本文部分内容引用: 中文维基百科. 一个简单的Makefile教程. Makefile简介 在软件开发中,make通常被视为一种软件构建工具.该工具主要经由读取一种名为"makefile&q ...
- Qt自定义事件的实现(转)
原文:http://blog.csdn.net/michealtx/article/details/6866094 初学Qt,用了Qt自带的事件,然后想怎么才能定义自己的事件呢?又如何使用自定义事件呢 ...
- [转]使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://repo1.maven.org/maven2 。
使用Maven添加依赖项时(Add Dependency)时,没有提示项目可用,并且在Console中,输出: Unable to update index for central|http://re ...