`
lovnet
  • 浏览: 6706611 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

WPF与Win32图形系统

阅读更多
说明:这里的Win32特指Vista操作系统之前的所有图形系统:GDI、GDI+、Direct3D。
GDI是当今应用程序的主流图形库,GDI图形系统已经形成了很多年。它提供了2D图形和文本功能,以及受限的图像处理功能。虽然在一些图形卡上支持部分GDI的加速,但是与当今主流的Direct3D加速相比还是很弱小。GDI+开始出现是在2001年,它引入了2D图形的反走样,浮点数坐标,渐变以及单个象素的Alpha支持,还支持多种图像格式。但是,GDI+没有任何的加速功能(全部是用软件实现)。
当前版本的WPF中,对一些Win32功能还没有很好的支持,比如WMF/EMF文件,单个象素宽度的线条等等。对于这些需求还需要使用GDI/GDI+来实现。
在Windows Vista中,GDI和GDI+仍然支持,它们与WPF并行存在,但是基本上没有任何功能性的改进。对GDI和GDI+的改进主要集中在安全性和客户相关问题上。WPF的所有提交都不依赖于GDI和GDI+,而是Direct3D。并且所有的Primitive都是通过Direct3D的本地接口实现的。还记得我前面随笔中提到过的Milcore吗?它就是和Direct3D交互的非托管代码组件。由于WPF的大部分代码都是以托管代码的形式存在的,所以WPF中有很多托管、非托管的交互。当然,在一些图形卡不支持WPF所需要的功能时,WPF也提供了稍微低效的软件实现,以此来支持在某些PC上运行WPF应用程序。
在Windows Vista中,Direct3D的关键改进就是引入了新的显示驱动模型。VDDM驱动模型虚拟化了显卡上的资源(主要是显示内存),提供了一个调度程序,因此多个基于Direct3D的应用程序可以共享显卡(比如WPF应用程序和基于WPF的Windows Vista桌面窗口管理)。VDDM的健壮性、稳定性也得到了提高,大量的驱动操作从内核(Kernel)模式移动到了用户(User)模式,这样提高了安全性,也简化了显示驱动的开发过程。
在Windows Vista中存在两个版本的Direct3D:Direct3D 9和Direct3D 10。WPF依赖于Direct3D 9,这样能更广泛的解决兼容性问题。另外一个非常重要的原因就是为Vista的服务器版本提高方便,因为服务器版本的Vista对显卡和Direct3D基本上没有任何的要求。同时WPF也支持Direct3D 10。Direct3D 10依赖与VDDM,只能在Windows Vista上使用。由于Windows XP没有VDDM,虽然Microsoft做了很大的努力来改善XP中Direct3D 9相关驱动,提高内容的显示质量,但是由于XP中没有对显卡资源的虚拟化,强制所有的应用程序都用软件提交。

WPF对某些多媒体的功能支持还需要依赖老的技术,比如DirectShow。当我们进行音频视频的捕捉或者其它任务时,只能直接用DirectShow实现,然后再用HwndHost嵌入到WPF内容当中。
利用类似的技术,我们可以在WPF应用程序中显示自定义格式的内容。通过提供自定义的DirectShow CODEC,然后用Media元素实现和WPF内容毫无限制的集成。
另外,WPF对XPS等文档的打印输出也得到了极大的改善。XPS文档本身的规范也极大的提高了其打印的质量,XPS文档的规范可以参考MSDN的资料。除了打印,Vista操作系统中对远程的改进也部分依赖于WPF,比如有远程协助、远程桌面和终端服务等等。它们的实现过程是通过发送一系列的“远程”命名到客户端,客户根据自己PC的性能和命名进行显示,这样显示的质量能得到极大的提高。
在WPF中,对Direct3D进行各种封装。当然,如果你本身对Direct3D/OpenGL很熟悉,也可以直接在WPF中使用。封装后的Direct3D更容易使用。并且在Web应用程序(XBAP)也可以使用Direct3D。在WPF中使用的Direct3D,没有直接用非托管代码控制所拥有的灵活性,也不能直接对硬件进行底层控制。
WPF中所有的提交都是矢量形式的,我们可以对图像或窗口进行任何级的放缩,而图像的质量不会有任何的问题。
分享到:
评论

相关推荐

    WPF揭秘 第一章 wpf 开发

    Windows Presentation Foundation (WPF) 是.NET... 第15章 与Win32、Windows Form以及ActiveX之间的互用性   第16章 用户控件和自定义控件   第17章 使用自定义面板做布局  第六部分 附录 附录 有用的工具 

    WPF揭秘 第四章 wpf 开发

    Windows Presentation Foundation (WPF) 是.NET... 第15章 与Win32、Windows Form以及ActiveX之间的互用性   第16章 用户控件和自定义控件   第17章 使用自定义面板做布局  第六部分 附录 附录 有用的工具 

    wpf完全教程1-4章

    Windows Presentation Foundation (WPF) 是.NET... 第15章 与Win32、Windows Form以及ActiveX之间的互用性   第16章 用户控件和自定义控件   第17章 使用自定义面板做布局  第六部分 附录 附录 有用的工具 

    WPF揭秘 第二章 wpf 开发

    Windows Presentation Foundation (WPF) 是.NET... 第15章 与Win32、Windows Form以及ActiveX之间的互用性   第16章 用户控件和自定义控件   第17章 使用自定义面板做布局  第六部分 附录 附录 有用的工具 

    WPF支持的3D图形库

    使用WPF创建3D条形图和饼图

    WPF揭秘 第三章 wpf 开发

    Windows Presentation Foundation (WPF) 是.NET... 第15章 与Win32、Windows Form以及ActiveX之间的互用性   第16章 用户控件和自定义控件   第17章 使用自定义面板做布局  第六部分 附录 附录 有用的工具 

    WPF Charts控件库的全面扩展(最新20161117)

    8、全方面的加入了各种加载动画效果,动画效果可屏蔽,同时原系统自带动画效果,可叠加,这是两种不同的效果,可以互补性的单个使用 9、设计了五种主题颜色,各人可以针对图形颜色和背景色进行更好的搭配,在用户...

    一个原创的函数图象绘制软件(C# WPF 含源码)

    一个自己写的函数图象绘制软件。 支持初高中教材中的各种基本函数类型,以及其它的自定义函数, 支持一阶至三阶求导数后绘制, 支持精度调整和颜色设置, ...需要 Win 7/8,需要 .NET Framework 4.5。

    Windows.UI.Composition-Win32-Samples:Windows.UI.Composition Win32示例

    该存储库包含一些示例,这些示例演示了WPF,Windows Forms和C ++ Win32应用程序中Window.UI.Composition API的使用。 可视层为图形,效果和动画提供了高性能的保留模式API。 这是跨Windows 10设备的UI的基础。 UWP ...

    Win-PS2EXE:PS1到EXE编译器PS2EXE.ps1的图形前端

    功能和限制: Win-PS2EXE不支持PS2EXE.ps1的所有参数在装有.Net 3.5x或.Net 4.x的每个Windows上,无需Visual Studio或MSBuild即可编译的WPF应用程序只有一个源文件拖放文件名单独的.Net 4.x和.Net 3.5x版本(因为...

    C++ 中 Windows 编程概述

    Windows Presentation Foundation (WPF),你可以使用 Win32 和新式 Windows 运行时 API。 作为一般规则,建议在需要以下功能时对桌面应用程序使用 C++: 还可以将 C++ 的强大功能和效率与 .NET 编程结合使用。

    将Lambdas用于WPF或Silverlight动画

    显示如何使用lambda和高阶函数处理WPF / Silverlight图形

    owchart证券图形控件 v1.0

    使用该控件库可更好更快的开发完全属于自己的股票行情交易系统,也可制作商业应用。 1.该控件库包含K线,、分时图、报价列表、买卖档、切换周期、几十种公式指标,几十种画线工具; 2.风格经典、示例完整、功能齐全、...

    Telerik ChartView股票数据软件20170422

    这是用Telerik ChartView设计的股票数据采集及分析软件,目前只完成了数据的采集和图形呈现,还没有加入分析功能,采集功能:从网上下载股票数据转换成Excel,导入系统,同时系统根据当前股票交易时间在设定后自动从...

    2018 猎豹网校 教程大全 资源难找赶紧保存吧

    北风网 C++反汇编基础:Win32平台(逆向实例、动态调试实例)[MP4] 安卓 Android 游戏编程入门(上)[MP4] Word排版高级技巧[MP4] Word 零基础入门[MP4] Windows程序设计 初级课程(一)[MP4] Windows Api学习指南...

    asp.net知识库

    常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN...

Global site tag (gtag.js) - Google Analytics