- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于NET的双缓冲技术
基于NET的双缓冲技术
通常在图形应用程序开发过程中,经常会遇到图形显示时屏幕不停闪烁的现象。画面要产生动态效果,编程时要在视图中进行贴图,并不断刷新重绘,但是刷新频率过高,就会出现闪屏的现象。又或者是实时数据显示,数据不断更新,数据所在的控件也需要不断地刷新,这样也会出现闪屏的现象。因此,闪屏这个问题严重地影响了用户的体验。
针对这个问题有一些解决办法:刷新特定的矩形区域、页面切换、双缓冲等。但在一般情况下,开发人员会选择双缓冲技术,因为适用范围广泛,不过需要较多的内存。
1 闪屏
闪屏现象出现的可能原因:为了维持窗口的正常显示,每次都需要调用Paint事件进行重绘操作刷新画面。虽然窗口在刷新过程中会使所有图元重绘,不过图元的重绘并不引发Paint事件,因此窗口刷新时只会调用一次Paint事件。在窗口刷新过程中,重绘的图元都会马上显示到窗口,只要有图元的位置,就会有图元的更替刷新,当图元较多数量时,图元更替刷新的时间存在肉眼可辨的时差时,就会导致闪烁现象出现;当图元数量较少时,窗体重图元更替刷新的位置也不多,窗口闪烁现象并不会很严重;随着图元数量的增加,绘图窗口每次刷新引起的图元重绘数量也会增加,窗口刷新的位置分布就更加广泛,闪烁现象就会越来越严重。又或者是因为窗口刷新时间间隔小于图元显示到窗口所耗费的时间,因此在对图元进行鼠标跟踪绘制操作,抑或是对图元进行变形操作,由于调用Paint事件次数大量增加,窗口刷新次数也同时增加,即使窗口刷新时所有图元的更替刷新没有时间差异,也会因为延时关系导致闪烁现象。
2 双缓冲技术
2.1 基本思想
Windows的重绘窗体操作一般分为3个阶段:
第一阶段,背景清除,通过Windows的操作系统级背景刷清除重绘窗体上的无效区域。
第二阶段,背景绘制,通过窗体的受保护方法OnPaint-Background完成窗体背景绘制,当然也可以通过重写该方法进行自定义窗体背景的操作。
第三阶段,图形绘制,通过窗体的受保护方法OnPaint完成图形绘制,然后引发Paint事件。3个阶段的操作全完成后,Windows窗体的绘图才算真正完成。而双缓冲技术就是将窗体重绘过程的3个阶段合为一次操作,从而实现图形闪烁现象的消除。具体实现方法是先在一块内存(后端缓冲区)中完成重绘窗体的3个阶段,然后再将绘制好的图形从内存中拷贝到显存中,如图1所示,由于在屏幕上只执行了一次显示图形的操作,因此用户观察不到窗体重绘的中间画面,从而消除了图形的闪烁。
2.2 实现方法
2.2.1 利用默认双缓冲
利用默认双缓冲的方法有两种,第一种也就是最简单的便是将.NetFramework中的Double Buffered属性设置为true:this.DoubleBuffeed=true;
第二种方法便是通过SetStyle为Windows窗体和Windows控件启用默认的双缓冲。在.Net框架2.0以上版本中设置参数属性如下: Double Buffer和Double Buffer参数设为true;而UserPaint设为true表示控件自行负责;All Painting lnWmPaint设为true表示禁止擦除背景。
2.2.2 自定义双缓冲
.netframework中的类Buffered Graphics Context独立管理和分配图形缓冲区。应用程序域都通过其默认Buffered Graphics Context实例实现应用程序默认双缓冲的管理。一般情况下,应用程序的应用域存在唯一性,因而每个应用程序通常都只有一个默认的由Buffered Graphics Manager类管理Buffered=Graphics Context实例。管理Buffered Graphics Context实现双缓冲的具体步骤如下:引用Buffered Graphics Context类的实例。通过调用Buffered Graphics Context.Allocate方法创建Buffered Graphics类的实例。通过设置Buffered Graphics.属性将图形绘制到缓冲区。
在缓冲区中完成所有的图形绘制操作后,再将缓冲区的图形内容通过Buffered Graphics.Render方法复制到与该缓冲区关联的绘图图面或者指定的绘图图面。完成呈现图形之后,对Buffered Graphics实例调用Dispose方法完成系统资源的释放。
2.2.3 编程实例
无锡地铁一号线的远程故障传输地面软件也需要
您可能关注的文档
最近下载
- 软件下载与安装、电脑疑难问题解决、office软件处理 + 关注
-
实名认证服务提供商
专注于电脑软件的下载与安装,各种疑难问题的解决,office办公软件的咨询,文档格式转换,音视频下载等等,欢迎各位咨询!
文档评论(0)