哪位大侠能够提供一些资料和说明,我找过几个代码,看不太明白。我现在有一副位图。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这个函数。由于点数比较多(图片比较大),描点时候视图闪烁。如何用双缓存绘图解决这一问题?

解决方案 »

  1.   

    可是我的背景是一副影像
    需要在影像上做标记,用的Moveto LineTo,花了很多十字×,有闪烁。如果是直接图片没问题,可是十字×如何在内存上画好?背景不是透明啊
      

  2.   

    将影像复制到内存DC,然后用Lineto等函数直接在内存DC上画出来十字,画完后再将内存DC复制到屏幕上的显示区,OK了
      

  3.   


    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();