关于双缓存绘图的问题

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这个函数。

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

如何用双缓存绘图解决这一问题?
...全文
92 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
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下载上一搜一大堆

19,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧