VC双缓冲绘图技术介绍

本文介绍了双缓冲绘图技术,用于解决应用程序中图形绘制的卡顿和闪烁问题。通过在内存中创建缓冲区,先绘制图形,再一次性拷贝到屏幕,提高绘图速度和用户体验。文章详细阐述了双缓冲绘图的原理、实现步骤,并结合GDI和设备上下文(DC)的概念,解释了Windows下图形输出的工作机制。
摘要由CSDN通过智能技术生成

    双缓冲绘图,它是一种基本的图形图像绘图技术。首先,它在内存中创建一个与屏幕绘图区域一致的对象,然后将图形绘制到内存中的这个对象上,最后把这个对象上的图形数据一次性地拷贝并显示到屏幕上。这种技术能够大大地提高绘图的速度,减少卡顿和闪屏的问题。

Tip:
去看看吧!1.
我们为什么要使用双缓冲技术来进行绘图?
    在应用程序开发中,当图像信息数据量很大时,绘图可能需要几秒钟甚至更长的时间,这时,应用程序可能会出现卡顿的现象。另外,如果窗体在响应WM_PAINT消息的同时也要进行复杂的图形处理,那么窗体在重绘时就会由于频繁的刷新而引起闪烁现象,而使用双缓冲技术就能有效地解决以上问题。

闪烁问题:
    窗体在刷新时,总要有一个擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后再调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。当WM_PAINT的响应很频繁的时候,这种反差也就越发明显。于是我们就看到了闪烁现象。
    如果只是仅仅去掉背景色的填充,的确无论怎样重绘图形都不会闪了。但是那样的话,窗体画面往往会变的乱七八糟。因为每次绘制图象的时候都没有将原来的图象清除,造成了图象的残留,叠加了新图形。所以单纯的禁止背景重绘是不够的,我们还要进行重新绘图。绘图函数可使用 BitBlt,它支持图形块的复制,速度很快。

双缓冲绘图实现方式:
    首先把要显示的图形先在内存中绘制好,然后再一次性地将内存中的图形一个点一个点地覆盖到屏幕上去(这个过程非常快,因为是非常完整的内存拷贝),以至于用背景色擦除界面后再贴图到屏幕上也不会闪烁了。
    步骤:

  1. 在内存中创建与画布一致的缓冲区;
  2. 在缓冲区绘图;
  3. 将缓冲区位图拷贝到当前画布并显示到屏幕上;
  4. 释放内存缓冲区。

流程图:
双缓冲绘图流程图

代码实现:
    这里在VC++开发平台使用MFC开发,一般在OnDraw和OnPaint函数中进行图像绘制。
    首先屏蔽背景刷新,背景刷新其实是在响应WM_ERASEBKGND消息,我们只要把OnEraseBkgnd函数返回值改为TRUE就行了。

//`直接绘图`,这里重绘会出现卡顿现象
void CDoubleBufferDlg::DrawItem(CDC* pDC)
{
    ASSERT_VALID(pDC);

    CRect rcClient;   
    pDC-></
  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值