我的IT技术成长之路(软件即服务和微软的新一代技术(WPF和WCF)

和大家探讨面向对象技术问题和软件即服务的架构实现模式
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

WPF介绍之一---认识Windows图形

Posted on 2008-11-01 19:29  Ryan.ZH  阅读(834)  评论(0编辑  收藏  举报

今天翻译了WPF介绍的第一节,认识WPF,简单的介绍了windows的图形原理。后面的内容我会尽快陆续的翻译贴出来,希望得到大家的帮助,和大家一起交流。如果发现有欠妥的地方,请大家在回复中给我指正,谢谢!!

 

WPF介绍

WPF(Windows Presentation Foundation)是一个全新的窗口展现系统。他是为.Net而设计的,受到了很多流行的展示技术,如:HTMLFlash,硬件加速(Hardware-accelerated)等的影响。他是对用户界面(User Interface)的一次根本的革新,对Windows95以来的用户界面技术将产生巨大的冲击。

在本章中,你将会深入WPF的架构,看看它到底是如何工作的。以及它对下一代Windows应用程序而言意味着什么。

 

认识Windows图形

如果不能够明白Windows开发人员实际上已经使用了本质上和WPF一样的展现技术15年的话,那么是很难赏识到WPF令人印象深刻的地方的。一个标准的Windows应用程序依赖于Windows操作系统的两部分来创建它自己的用户界面:

1.      User32提供了为我们大家所熟悉的Windows元素的外观和体验,像按钮(Button)、文本框(TextBox)等等。

2.      GDI/GDI+提供了绘图支持,像图形、文本、图片的渲染,这需要花费而外的复杂(并且经常并不能够获得很好的表现)。

几年中,User32GDI/GDI+技术都得到了优化,并且可发人员用于和他们进行交互的应用程序接口(APIs)也已经发生了巨大的变化。但是,不论你是用.NetWindows窗体( Form)开发应用程序(Crafting Application)还是依依不舍的使用过去的Visual Basic 6或者是基于MFCC++编码,幕后都是相同的Windows操作系统部件在工作。新的Framework更好的封装了与Win32GDI/GDI+ 的交互。它们在效率、降低复杂性方面做出了改进,并且提供了预焙(Prebaked)的功能,这样就不用自己编码;但是它们不能减少十多年前设计的系统组件的一些根本性的限制。

DirectX:新的图形引擎

围绕着User32GDI/GDI+库的限制,微软创造了DirectXDirectX开始作为一个拼凑的(Cobbled-together)的、易于出错的(Error-Prone)的工具包用于在Windows平台上创建游戏。设计它的任务就是速度。因此微软和显卡的厂商紧密合作,为DirectX提供硬件加速以满足复杂特性和诸如局部透明度和三维图形等特效的需求。

DirectX被首次介绍(在Windows95后不久)的几年中,DirectX发展成熟。目前它已经被集成到Windows中,用于支持所有的流行显卡。尽管这样,DirectX的编程API作为游戏开发人员的工具包仍然反映它的根源。因为他自身的复杂性,DirectX几乎从来没有被应用到传统的Windows应用程序(像商务软件)。

WPF改变了这个情况。在WPF中,底层的图形技术不是GDI/GDI+而是DirectXWPF应用程序不论用户创建的是何种类型的用户界面都使用DirectX。这也就意味着,无论你是设计复杂的三维图形,还是只是绘制按钮和简单的文本,所有的工作通过DirectX的管线(Pipeline)来完成。结果,即使最简单的商务软件也可以使用丰富的页面效果,像:透明度和反走样{anti-aliasing}。你也可以从硬件加速中受益,简单来说就是,DirectX从尽量多的专注于显卡处理器的GPU(Graphic Processing Unit)的工作中脱离出来。

仍然在图片(有限扩展)中的组件就是User32。这是因为WPF仍然有一些服务依赖于User32,像处理和路由输入,整理哪你一个应用程序属于屏幕固定资源(real estate)的哪一部分。尽管这样,所有的绘图都是经由DirectX

 

硬件加速和WPF

你可能知道,显卡在支持特殊渲染特性和优化方面是不同的。用DirectX进行编程时,这是一个令人头痛的事情。用WPF,这个不同会被更少的被涉及。因为WPF有让它所执行的所有事情都通过软件计算而不是依赖于显卡的内建的支持。

拥有一个高性能的显卡并不能绝对保证WPF中的硬件加速性能会运行的更快。软件同样扮演了一个重要的角色。举例来讲,WPF不能为驱动过期的显卡提供硬件加速。WPFWindows Vista系统中可以利用WDDM(Windows Vista Display Driver Model的优势发挥更好的性能。Vista WDDMWindows XPWDDM相比较有几个改进。最重要的,WDDM允许一次将多个GPU操作加入计划。并且允许在超出显卡显存的情况下,将超出的显卡显存按页(Paged)映射到正常的系统内存。

作为通用的经验法则,在200411月,微软发布了新的开发大纲之后,WPF提供了某种对所有WDDM驱动和XPDM驱动的硬件加速。当然,支持的级别是不同的。当WPF的基础结构(Infrastructure)第一次启动,它会评估你的显卡,并赋予它一个0-2之间的鉴定等级,被描述在名为“WPF等级(tiers)”的侧边栏里。

WPF所带给我们的期许的部分之一就是你不需要担心细节和具体硬件的特异之处。WPF拥有足够的智能在可能的地方使用硬件的优化,但是它有一个针对所有事务的软件待援(fallback)。因此,如果你在一个有老化显卡的计算机上运行WPF应用程序,界面仍然会按设计的内容展示。当然,软件会运行的很缓慢,所以你会发现老显卡运行特性丰富的WPF应用程序的效果不是很好。由其是含有复杂动画或者是图形效果强烈的应用程序。在实际情况下,你可以选择降低用户界面的复杂效果,这取决于客户端的硬件加速所允许的水平(Tier属性显示出来的渲染能力)。