双缓冲原理

形象的解释:
首先我们在内存环境中建立一个“虚拟”的屏幕,然后在这块屏幕上绘制复杂的图形,等图形全部绘制完毕的时候,再一次性的把内存中绘制好的图形“拷贝”到另一块屏幕上。采取这种方法可以提高绘图速度,极大的改善绘图效果。个人理解:双缓冲就是有两个缓冲区,分别称为前端缓冲区和后备缓冲区。在后备缓冲区中绘制好图形,然后拷贝到前端缓冲区中,在屏幕上进行显示。后备缓冲区负责实际的图形绘制工作,前端缓冲区负责屏幕的显示。当屏幕需要需要重绘时,只需将后备缓冲区的内容交换到前端缓冲区来,等待的时间只是内存拷贝的时间,不需要等待图形绘制的时间。因此,采用双缓冲技术,既可以解决屏幕闪烁的问题,又可以实现快速重绘。
 
作用:
解决屏幕闪烁的问题。

屏幕闪烁的原因:
造成屏幕闪烁的原因是相邻两帧图像之间存在的巨大差异。而造成这一差异的原因又在于VC本身的处理机制。在VC中,窗体每次刷新时,首先用系统背景色对窗体进行填充,然后才会调用绘图代码对窗口进行重绘。在默认情况下,系统背景色是白色,因此每次重绘时,相当于在相邻两帧图像间插入了一帧全白的图像,因此这样一檫一写造成了图像的巨大反差,当WM_PAINT的响应很频繁的时候,屏幕闪烁也就更严重了。
 
双缓冲的实现:
       HDC dc = GetDC(hwnd);  //屏幕DC
HDC memDC;
HBITMAP bm;


//step1:为屏幕DC创建兼容的内存DC
memDC = CreateCompatibleDC(dc);
//step2:创建与屏幕DC兼容的的位图
bm = CreateCompatibleBitmap(dc,1024,768);
//step3:把创建的位图选进内存DC中,相当于创建画布
SelectObject(memDC, bm);
//在内存DC中绘制图形


//step4:把内存DC中内容拷贝到屏幕DC中
BitBlt(dc, 0, 0, 1024, 768, memDC, 0, 0, SRCCOPY);


ReleaseDC(hwnd, dc);
DeleteObject(memDC);

 
何为DC:
windows操作系统为了屏蔽不同的硬件环境,让编程时候不用具体的硬件差别,采取了一系列办法,DC就是这样产生的。简单的说,DC抽象了不同的硬件环境为标准环境,用户编写时使用这个虚拟的标准环境,而不是真实的硬件,与真实硬件打交道的工作一般交给了操作系统和驱动程序完成(这同样解释了为什么我们需要经常更新驱动程序的问题)
 
要点:
 
1.不能用全局变量保存DC,只能随取随用。因为DC需要占用一定的内存,那么在频繁的页面调度中,位置难免改变,于是用来标志指针的句柄也就不同了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值