关于双缓存绘图的问题

icycn 2010-05-13 06:04:17
哪位大侠能够提供一些资料和说明,我找过几个代码,看不太明白。

我现在有一副位图。pBitmapInfo是信息头指针,pData是其数据区首指针。
在OnDraw里面用StretchDIBits显示位图的。

StretchDIBits(pDC->m_hDC, 0, 0, w, h, 0, 0, Width, Height,
pDoc->pData[nLayer], pDoc->pBitmapInfo[nLayer], DIB_RGB_COLORS, SRCCOPY);

现在我需要在图片上描点,红点。描点不改变图片数据,用的SetPixel这个函数。

由于点数比较多(图片比较大),描点时候视图闪烁。

如何用双缓存绘图解决这一问题?
...全文
58 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
icycn 2010-05-14
可是我的背景是一副影像
需要在影像上做标记,用的Moveto LineTo,花了很多十字×,有闪烁。

如果是直接图片没问题,可是十字×如何在内存上画好?背景不是透明啊
回复
MY_ITOU 2010-05-14
将影像复制到内存DC,然后用Lineto等函数直接在内存DC上画出来十字,画完后再将内存DC复制到屏幕上的显示区,OK了
回复
gudufuyun 2010-05-14

CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象

//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//这时还不能绘图,因为没有地方画 ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);

//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);

//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));

//绘图
MemDC.MoveTo(……);
MemDC.LineTo(……);

//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);

//绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();

回复
周药师 2010-05-13
双缓存绘图
就是在内存画布上画 画好后再赋值到界面上
回复
xiuxianshen 2010-05-13
CSDN下载上一搜一大堆
回复
相关推荐
发帖
图形处理/算法
创建于2007-09-28

1.9w+

社区成员

VC/MFC 图形处理/算法
申请成为版主
帖子事件
创建了帖子
2010-05-13 06:04
社区公告
暂无公告