双缓冲技术简介

         双缓冲在我之前自行设计的小型GUI系统中有使用到过,在内存中开辟了一块内存空间作为显存,直接操作内存相当于操作像素点。首先说说为什么要使用这一个内存空间,而不是直接控制显示器来显示图像。那时候做一个项目是在嵌入式的显示器上绘制一个波形数据,和示波器的界面很类似,每当更新一个数据的时候系统需要做的事分为两步,第一步是将之前绘制的波形图像清除,第二步是将新的数据显示出来,这样会出现一个很明显的闪烁效果,令人不满。后来想了一个办法,使用一个内存缓冲区来作为中间层,然后绘制图像的时候在这个缓冲区中绘制,绘制完成之后将这个缓冲区全部写入到显示器,这样就省略了清除的步骤,消除了闪烁的效果,不知不觉就使用到了双缓冲技术。Linux上的FrameBuff也会使用双缓冲技术提高显示效果。

 

       摘自百度百科《双缓冲》:“我们看电视时,看到的屏幕称为OSD层,也就是说,只有在OSD层上显示图像我们才能看到。现在需要创建一个虚拟的、看不见但是可以在上面画图(比如说画点、线)的OSD层,我称之为offscreen(后台缓冲区)。这个offscreen存在于内存中,我们在上面画图,这个offscreen上面的东西可以显示在OSD层上,需要一个创建这个offscreen的函数,返回这个offscreen的句柄(整型指针)、宽度、高度、指向新建offscreen数据缓冲区的指针,该缓冲区是一个在函数外创建的offscreen的数据缓冲区,大小是offscreen的高度*宽度*每个像素点数据的大小。闪烁是图形编程的一个常见问题。需要多重复杂绘制操作的图形操作会导致呈现的图像闪烁或具有其他不可接受的外观。双缓冲的使用解决这些问题。双缓冲使用内存缓冲区来解决由多重绘制操作造成的闪烁问题。当启用双缓冲时,所有绘制操作首先呈现到内存缓冲区,而不是屏幕上的绘图图面。所有绘制操作完成后,内存缓冲区直接复制到与其关联的绘图图面。因为在屏幕上只执行一个图形操作,所以消除了由复杂绘制操作造成的图像闪烁。”


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值