什么是双缓冲
1个回答
展开全部
可是,我却对双缓冲这个词感到莫名其妙
双缓冲听起来好像很深奥,其实其本质很简单:就是先生成一张位图,然后把所有的绘图工作都画的这张位图上,然后再将这张位图一次性画到屏幕中去。
它的关键技术就是: 不要直接在屏幕上画图,而是将所有的绘图工作先绘制到图片上
我们研究下从开始绘图到屏幕显示图像的过程
第一步: 将所有的绘图缓冲到位图中
第二步:将位图拷贝到屏幕上,此时相当于所有的绘图又跳跃到了屏幕
绘图进行了两次跳跃:第一次跳跃到位图中,第二次跳跃到屏幕上,所以这种技术可以称之为双缓冲
闪烁的原因就是新图和旧图直接的差别造成的。
1) 更新时,先使用背景刷 刷一下背景,然后再贴图 背景刷和图像之间的差别能造成闪烁,这点可通过响应察除背景刷消息来消除 OnEraseBkgnd(CDC* pDC)
2) 先画一张白色图片,然后再在白色图片上画红色矩形
此时,背景刷问题解决了,但是在屏幕上 首先贴一张白图,然后再白图上画一个红色矩形,二者颜色差别明显,如果频繁绘图时,便不可避免的产生闪烁。
那如果使用双缓冲,此种现象便可以消除,分析如下:
先把白色图画到内存位图中,然后再将红色矩形画到这个内存位图中,最后将这个位图拷贝到屏幕上。
由于原屏幕上的图像与位图中的图像差别很小(都是白色图和红矩形),因此当频繁绘图时,可有效降低闪烁
鄙视一下 那些讲不清道理,又不肯给出实例的家伙--0--
以下是伪代码:
双缓冲听起来好像很深奥,其实其本质很简单:就是先生成一张位图,然后把所有的绘图工作都画的这张位图上,然后再将这张位图一次性画到屏幕中去。
它的关键技术就是: 不要直接在屏幕上画图,而是将所有的绘图工作先绘制到图片上
我们研究下从开始绘图到屏幕显示图像的过程
第一步: 将所有的绘图缓冲到位图中
第二步:将位图拷贝到屏幕上,此时相当于所有的绘图又跳跃到了屏幕
绘图进行了两次跳跃:第一次跳跃到位图中,第二次跳跃到屏幕上,所以这种技术可以称之为双缓冲
闪烁的原因就是新图和旧图直接的差别造成的。
1) 更新时,先使用背景刷 刷一下背景,然后再贴图 背景刷和图像之间的差别能造成闪烁,这点可通过响应察除背景刷消息来消除 OnEraseBkgnd(CDC* pDC)
2) 先画一张白色图片,然后再在白色图片上画红色矩形
此时,背景刷问题解决了,但是在屏幕上 首先贴一张白图,然后再白图上画一个红色矩形,二者颜色差别明显,如果频繁绘图时,便不可避免的产生闪烁。
那如果使用双缓冲,此种现象便可以消除,分析如下:
先把白色图画到内存位图中,然后再将红色矩形画到这个内存位图中,最后将这个位图拷贝到屏幕上。
由于原屏幕上的图像与位图中的图像差别很小(都是白色图和红矩形),因此当频繁绘图时,可有效降低闪烁
鄙视一下 那些讲不清道理,又不肯给出实例的家伙--0--
以下是伪代码:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询