HDC deskDC = ::GetDC(NULL); HDC srcDC = ::CreateCompatibleDC(deskDC);
HDC xorDC = ::CreateCompatibleDC(deskDC);

HBITMAP hSrcOldBmp = (HBITMAP)::SelectObject(srcDC,hBitmap);
HBITMAP hXorOldBmp = (HBITMAP)::SelectObject(xorDC,m_hBitmap); ::BitBlt(srcDC,0,0,m_cxClient,m_cyClient,xorDC,0,0,SRCINVERT);
hBitmap = (HBITMAP)::SelectObject(srcDC,hSrcOldBmp); ::DeleteObject(hSrcOldBmp);
::DeleteObject(hXorOldBmp);
::DeleteDC(srcDC);
::DeleteDC(xorDC); ::ReleaseDC(NULL,deskDC);那么最后得到的hBitmap为什么不对???

解决方案 »

  1.   

    昨晚刚弄过这个问题
    最后一个参数改成PATINVERT看看~~
    异或两次就会变回原图~~
      

  2.   

    DSTINVERT 目标矩形成为反颜色
    PATINVERT 用XOR操作符使指定模式的颜色与目标矩形颜色结合
    SRCINVERT 用XOR操作结合源矩形、目标矩形颜色
    ::BitBlt(srcDC,0,0,m_cxClient,m_cyClient,xorDC,0,0,SRCINVERT);//怎么个不对法?
    hBitmap = (HBITMAP)::SelectObject(srcDC,hSrcOldBmp);//这是不是跟没玩一样啊
      

  3.   

    opencv的cvXor函数是用来进行异或操作的