如何对两幅bmp图像进行异或运算?
我现在已经得到两幅bmp图像,想对里面每一个像素点进行异或操作,去掉其中的相同部分,保留下不同的部分到ChangedBitmap里,不过现在得到的是全黑的图片,代码如下,请各位高手赐教!
LPVOID m_newlpvBits = NULL, m_oldlpvBits = NULL;
char *m_newcbBuffer = NULL, *m_oldcbBuffer = NULL;
HDC hDC, hDC_old, newhdc = NULL, oldhdc = NULL;
BITMAP bb, bb1;
BITMAPINFO b, b1;
HANDLE hp, fh=NULL;
DWORD dwX, dwY;
//***************
dwX=GetSystemMetrics(SM_CXSCREEN);
dwY=GetSystemMetrics(SM_CYSCREEN);
hDC=::GetDC(NULL);
hDC_old = ::GetDC(NULL);
newhdc=CreateCompatibleDC(hDC);
oldhdc=CreateCompatibleDC(hDC_old);
bb.bmWidth=dwX;
bb.bmHeight =dwY;
bb.bmPlanes = 1;
bb.bmWidthBytes=bb.bmWidth*3;
bb.bmBitsPixel=3;
bb.bmType=0;
b.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
b.bmiHeader.biWidth=dwX;
b.bmiHeader.biHeight =dwY;
b.bmiHeader.biPlanes = 1;
b.bmiHeader.biBitCount =24;
b.bmiHeader.biCompression = BI_RGB;
b.bmiHeader.biSizeImage = 0;
b.bmiHeader.biXPelsPerMeter = 0;
b.bmiHeader.biYPelsPerMeter = 0;
b.bmiHeader.biClrUsed = 0;
b.bmiHeader.biClrImportant = 0;
b.bmiColors[0].rgbBlue=8;
b.bmiColors[0].rgbGreen=8;
b.bmiColors[0].rgbRed=8;
b.bmiColors[0].rgbReserved=0;
hp=GetProcessHeap();
bb1 =bb;
b1 = b;
m_newcbBuffer=(char *)HeapAlloc(hp, HEAP_ZERO_MEMORY, bb.bmHeight*bb.bmWidth*4);
m_oldcbBuffer=(char *)HeapAlloc(hp, HEAP_ZERO_MEMORY, bb1.bmHeight*bb1.bmWidth*4);
ChangedBitmap=CreateCompatibleBitmap(newhdc, bb.bmWidth, bb.bmHeight);
HBITMAP hOldBitmap;
hOldBitmap=(HBITMAP)SelectObject(newhdc, ChangedBitmap);
GetDIBits(newhdc, newBitmap, 0, dwY, m_newcbBuffer, &b, DIB_RGB_COLORS);
GetDIBits(oldhdc, oldBitmap, 0, dwY, m_oldcbBuffer, &b1, DIB_RGB_COLORS);
::BitBlt(newhdc, 0, 0, bb.bmWidth, bb.bmHeight, oldhdc, 0, 0, SRCCOPY);
ChangedBitmap=(HBITMAP)SelectObject(newhdc, hOldBitmap);
char * ChangecbBuffer=(char *)HeapAlloc(hp, HEAP_ZERO_MEMORY, bb.bmHeight*bb.bmWidth*4);
GetDIBits(newhdc, ChangedBitmap, 0, dwY, ChangecbBuffer, &b, DIB_RGB_COLORS);