哪位大侠能够提供一些资料和说明,我找过几个代码,看不太明白。我现在有一副位图。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这个函数。由于点数比较多(图片比较大),描点时候视图闪烁。如何用双缓存绘图解决这一问题?
在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这个函数。由于点数比较多(图片比较大),描点时候视图闪烁。如何用双缓存绘图解决这一问题?
需要在影像上做标记,用的Moveto LineTo,花了很多十字×,有闪烁。如果是直接图片没问题,可是十字×如何在内存上画好?背景不是透明啊
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();