双缓冲(Double Buffer)原理和使用

双缓冲(Double Buffer)原理和使用-刘师傅
刘师傅
擅长邻域:Java,HTML,JavaScript,CSS,SQL,ORACLE,MySQL,SQL SERVER,Spring 全家桶

2020-11-04 17:27:05   279浏览 分类: Java

在图形图象处理编程过程中,双缓冲是一种基本的技术。我们看电视时,看到的屏幕称为OSD层,也就是说,只有在OSD层上显示图像我们才能看到。现在,我需要创建一个虚拟的、看不见但是可以在上面画图(比如说画点、线)的OSD层,我称之为offscreen(后台缓冲区)。这个offscreen存在于内存中,我们在上面画图,这个offscreen上面的东西可以显示在OSD层上,需要一个创建这个offscreen的函数,返回这个offscreen的句柄(整型指针)、宽度、高度、指向新建offscreen数据缓冲区的指针,该缓冲区是一个在函数外创建的offscreen的数据缓冲区,大小是offscreen的高度*宽度*每个像素点数据的大小。闪烁是图形编程的一个常见问题。需要多重复杂绘制操作的图形操作会导致呈现的图像闪烁或具有其他不可接受的外观。双缓冲的使用解决这些问题。双缓冲使用内存缓冲区来解决由多重绘制操作造成的闪烁问题。当启用双缓冲时,所有绘制操作首先呈现到内存缓冲区,而不是屏幕上的绘图图面。所有绘制操作完成后,内存缓冲区直接复制到与其关联的绘图图面。因为在屏幕上只执行一个图形操作,所以消除了由复杂绘制操作造成的图像闪烁。
简而言之,就是在内存中画图,画好之后再贴图显示。实际中的应用,可以参考这个问题的解决:
https://www.jf3q.com/fly/details/398.html
为什么需要双缓冲,其实最本质的原因还是设备绘图太慢,如果使用DirectX或者Opengl借助GPU进行绘图,会发现即使没有启用双缓冲,也能得到丝滑的效果。其他的像GDI、GDI+等处理此类问题的方法基本类似,都是通过改变组件绘制方式来解决刷新闪烁的问题。

好文章就要一起分享哦!分享海报

此处可发布评论

评论(0

暂无评论,快来写一下吧
客服QQ 1913284695