CImage下的双缓存

7 篇文章 2 订阅

网上关于CImage的资料真是少……因为项目的原因,需要用到CImage类,但是图像刷新很频繁,导致闪屏很严重,有查不着相关的资料,真是纠结了很久。不过最后还是解决了^_^ ^_^ ^_^ 

不管利用的是什么类,什么工具,双缓存的思想是一致的:首先创建一个内存DC,记为MemDC;接着将我们的所有的绘图操作都画到MemDC中;最后利用BitBlt或者StretchBlt将MemDC中的内容一次性的拷贝绘制到目标DC上,即我们看到的客户端上。多说无益,上代码:

	CWnd *pWnd = GetDlgItem(IDC_IMG_SHOW);
	CClientDC dc(pWnd);
	CRect rectBig;
	pWnd->GetClientRect(rectBig);

	CBitmap bitmap;//一定要有画布,没有画布玩不转的
	CDC MemDC;
	bitmap.CreateCompatibleBitmap(&dc, rectBig.Width(), rectBig.Height());
	MemDC.CreateCompatibleDC(&dc);
	MemDC.SelectObject(&bitmap);//选择画布
	MemDC.SetStretchBltMode(HALFTONE);//设置拉伸模式
	MemDC.FillSolidRect(rectBig, RGB(0, 0, 0));//背景色

	m_imgData.Draw(MemDC.m_hDC, rect);//m_imgData是CImage对象,rect表示绘图的位置
	dc.StretchBlt(rectBig.left, rectBig.top, rectBig.Width(), rectBig.Height(), &MemDC, rectBig.left, rectBig.top, rectBig.Width(), rectBig.Height(), SRCCOPY);

就是这样啦,其实很简单。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值