繁体中文
高级搜索
 
首页 | 电子技术应用 | 行业最新动态 | 行业最新产品 | 软件资料下载 | 电路图纸欣赏 | 博客文章精选 | 电子精品论坛 | 电子技术贴吧

当前位置:首页 >> 博客文章精选 >> 嵌入式系统-博客 >> windML双缓冲技术
windML双缓冲技术
作者:   来源: 发表时间:2006-12-08  字号:  
WindML提供了2D图形的解决方案.但在某设备信息化改造项目中。由于需要实时采集 、显示虚拟仪表图形信息、驾驶员终端显示综合控制信息 、车内各设备状态信息车长命令、报警等 。都需要实时绘制画面,每次采集到数据和各信息互相切换都要刷新画面。画面闪烁、抖动比较剧烈.因此可以把在显示时不变化的信息以位图背景的形式保存 ,调用(uglDefault—BitmapSet0)来实现,在此背景上来动态刷新变化的仪
表指针、设备状态 、报警等。这样在刷新画面时数据量减少,画面的效果有所改善,但是由于采集到的数据 、状态等是实时变化,画面闪烁、抖动存在。视觉效果不佳 ,本文应用 WindML的双缓冲技术来解决这一问题 。
双缓冲技术是指不改变可见视频缓存区起始地址,而是在内存中开辟一块与屏幕一样大小的存储区域 ,作为缓冲屏幕,同时将下一帧要显示的图像绘制到这个缓冲屏幕上面,在显示的时候将虚拟屏幕中的数据直接复制到可见视频缓存区里。由于图形绘制过程是在不可见的虚拟屏幕中进行.所以可以消除屏幕的闪烁 、抖动。 以虚拟仪表图形信息显示为例:在具体的实现中,让仪表指针、设备状态、报警等的过程在Off_Screen(后台)实现。即在绘制当前图形信息的时候 。调用函数uglPageDrawSet()另外指定绘制下一图形操作的页面(缓冲)。在绘制完成后,再通过 uglPagevisableSet()把Off-Screen的图像拷贝到前台,即实现图像的刷新,这就可以有效的解决图像闪烁 、抖动问题。具体实现如下 :
page[0]=UGL_PAGE_ZERO—ID;
page[1]=uglPageCreate(devId); //建双缓冲页
bgBitmap="uglBitmapCreate" (devld,&XNBPDib,UGL_DIB_INIT_DATA,0,UGL_NULL);//由位图数据信息创建位图
uglDefaultBitmapSet(gc,bgBitmap);//设 置 bgBitmap为画图背景
uglPageDrawSet(devld,page[1]);//设置活动的绘图双缓冲(页)
uglBitmapBh (gc, DisplayBitmap,0,0,16,16, UGL_DEFAULT_ID,0,0);
… … … … . .
//在变化的位置绘制的位图和其它具体图形绘制
uglPageVisibleSet(devld,page[1]);//在前台显示
uglPageDrawSet(devId,page[O]);//后台绘制下一图像
uglPageVisibleset(devId,page[0]); 像在前台显示
uglPageDrawSet(devId,page[1]);后台绘制下一图像
… … … … … … … … … …

uglPageDestroy(devld,page[1]);//释放缓冲

!注意:如果您发现此文章出现影响您的阅读的状况,请从浏览器地址栏里复制本文的链接到留言本报告给站长解决!
  • 上一篇: 双缓冲续
  • 下一篇: 为arm,51与优盘进行串口通信的东东

  • >> 联系我们请给我们留言·留言本
    本站所有提供的信息软件资料均来自网络,版权及著作权归原作者所有,如果无意中侵犯了您的相关权利或触及法律法规,请给我们留言, 我们将在24小时内删除。
      浙ICP备05071687号  电子技术精品网