C的环境下GDI+绘图效率的研究.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C的环境下GDI绘图效率的研究

C的环境下GDI+绘图效率的研究   [摘要]本文在简单介绍GDI和GDI+的基础上,指出GDI+在绘制动画时效率不足的劣势,并对三种不同的GDI+动画绘图方式进行了详细的阐述;最后实现了一个GDI+界面绘图程序,比较和验证了三种不同方式的绘图性能。实验表明,使用双缓冲和bitblt结合的方式,可以有效的解决直接绘制方式的闪烁问题,提高绘图效率。   [关键词]GDI+;动态绘图;双缓冲;bitblt   中图分类号:P631.84 文献标识码:A 文章编号:1009-914X(2015)05-0134-01   1.引言   GDI是微软公司的著名的二维图形引擎,GDI+则是微软公司为了提高显示效果而推出的一种新型图形引擎。GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。   GDI+是Windows XP中的一个子系统,它主要负责在显示屏幕和打印设备输出有关信息,它是一组通过C++类实现的应用程序编程接口。顾名思义,GDI+是以前版本GDI的继承者,出于兼容性考虑,Windows XP仍然支持以前版本的GDI,但是在开发新应用程序的时候,开发人员为了满足图形输出需要应该使用GDI+,因为GDI+对以前的Windows版本中GDI进行了优化,并添加了许多新的功能。   作为图形设备接口的GDI+使得应用程序开发人员在输出屏幕和打印机信息的时候无需考虑具体显示设备的细节,他们只需调用GDI+库输出的类的一些方法即可完成图形操作,真正的绘图工作由这些方法交给特定的设备驱动程序来完成,GDI+使得图形硬件和应用程序相互隔离.从而使开发人员编写设备无关的应用程序变得非常容易。Microsoft Windows GDI+服务分为以下3个主要部分:   (1)二维矢量图形。矢量图形由图元组成,而图元则由一系列坐标系统的点集组成。例如,一条直线可以由它的两个端点所确定,一个矩形可以通过给出它的左上角点的位置加上它的宽度、高度来确定。一个简单的路径可以由一个由直线连接而成的点数组来描述。一条贝塞尔样条是由4个控制点所描述。   (2)图象。某些图片很难或者不可能采用矢量图形技术来显示。比如,工具栏按钮图片和图标和一张拥挤的棒球馆的高分辨率的数码照片。这种类型的图像采用位图进行存储,即由表示屏幕上独立点的颜色的数字型数组所组成。用于存储位图信息的数据结构往往比矢量图形要复杂的多,因此出于此种原因GDI+中提供了好几种类,如Bitmap类。   (3)排版。排版关系到多种字体、尺寸和样式文字的显示。GDI+提供对这项复杂的任务给人深刻印象的的支持。新的特性中包括了子象素抗锯齿功能,它使得在液晶显示屏上可以显示更加平滑的显示文本。   2.GDI+绘图方式简介   下面对Microsoft Visual Studio 2010编程环境下基于C#编程语言的GDI+的几种不同的绘图方式进行简介。在Ctt中,GDI+图形图像处理用到的主要命名空间是Systenl.Drawing,它提供了对GDI+基本图形功能的访问,主要有Graphics类、Bitmap类、从Brush类继承的类、Font类、Icon类、Image类、Pen类、Color类等。C#中GDI+绘图的方式主要分为直接绘制,双缓冲和使用GDI函数三种。以绘制一个矩形为例,无论采用哪一种方法,都需要先在当前窗口先创建画板、矩形和画刷:   Graphics g=this.CreateGraphics();∥在当前窗口创建一个画板   ∥定义矩形,参数为起点横纵坐标以及其长和宽   Rectangle rect=new Rectangle(10,10,200,200);   ∥单色填充   SolidBrush b1=new SolidBrush(Color.Blue);∥定义蓝色画刷   如果使用直接绘制的方法,则只需要调用FillRectangle函数用画刷直接填充矩形即可:   g.FillRectangle(b1,rect);∥填充这个矩形   这种方法比较简单易用,容易理解,在绘制静态图形时,能够很好的满绘图需求。但是在绘制动画时,不仅效率低下,而且会产生图片闪烁的现象。其原因是GDI+画图是将所有的图元先存入显卡的缓存,显卡会每隔一段时间将显存中的内容输出到显示器中。每画一个图元,系统就要做一次图形的绘制操作。图形的重绘是很占用资源的,特别当需要重绘的图形数量很多的时候,所造成的消耗就特别大,导致闪烁,不流畅等情况。   使用双缓冲的绘图方式可以有效的消除闪烁的现象。双缓冲的主要思路是在内存中开辟一块与显存中大小一致的

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档