1。我现在要截屏获取两张图片A,B
2。两张图片获取后要比较这两张图片的不同之处
3。比较完后要在屏幕上显示出A或者B,然后另外显示一张有明显区别的图片 C。
C这张图片是经过两张图片比较后绘出的。
我现在截屏的代码如下,不知道下面该怎么去处理,恳请各位高手指点:
//获取图片
void GetPicture(HDC hScrDC, LPRECT lpRect)
{
// 屏幕和内存设备描述表
HDC hMemDC;
// 位图句柄
HBITMAP hBitmap,hOldBitmap;
// 选定区域坐标
int nX, nY, nX2, nY2;
// 位图宽度和高度
int nWidth, nHeight;
// 确保选定区域不为空矩形
if (IsRectEmpty(lpRect))
return ;
// 获得选定区域坐标
nX = lpRect->left;
nY = lpRect->top;
nX2 = lpRect->right;
nY2 = lpRect->bottom;
nWidth = nX2 - nX;
nHeight = nY2 - nY;
//为指定设备描述表创建兼容的内存设备描述表
hMemDC = CreateCompatibleDC(hScrDC);
// 创建一个与指定设备描述表兼容的位图
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
// 把新位图选到内存设备描述表中
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
// 把屏幕设备描述表拷贝到内存设备描述表中
StretchBlt(hMemDC,0,0,nWidth,nHeight,hScrDC,nX,nY,nWidth,nHeight,SRCCOPY);
//得到屏幕位图的句柄
hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
//
CBitmap *pBitmap;
pBitmap=NULL;
pBitmap=CBitmap::FromHandle(hBitmap); int nCX=pBitmap->GetBitmapDimension().cx;
int nCY=pBitmap->GetBitmapDimension().cy;
LONG lSize=(LONG)nCX*nCY;
::GetBitmapBits(hBitmap,lSize,szPictureInfo); //清除
DeleteDC(hMemDC);
DeleteObject(hOldBitmap);}
2。两张图片获取后要比较这两张图片的不同之处
3。比较完后要在屏幕上显示出A或者B,然后另外显示一张有明显区别的图片 C。
C这张图片是经过两张图片比较后绘出的。
我现在截屏的代码如下,不知道下面该怎么去处理,恳请各位高手指点:
//获取图片
void GetPicture(HDC hScrDC, LPRECT lpRect)
{
// 屏幕和内存设备描述表
HDC hMemDC;
// 位图句柄
HBITMAP hBitmap,hOldBitmap;
// 选定区域坐标
int nX, nY, nX2, nY2;
// 位图宽度和高度
int nWidth, nHeight;
// 确保选定区域不为空矩形
if (IsRectEmpty(lpRect))
return ;
// 获得选定区域坐标
nX = lpRect->left;
nY = lpRect->top;
nX2 = lpRect->right;
nY2 = lpRect->bottom;
nWidth = nX2 - nX;
nHeight = nY2 - nY;
//为指定设备描述表创建兼容的内存设备描述表
hMemDC = CreateCompatibleDC(hScrDC);
// 创建一个与指定设备描述表兼容的位图
hBitmap = CreateCompatibleBitmap(hScrDC, nWidth, nHeight);
// 把新位图选到内存设备描述表中
hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
// 把屏幕设备描述表拷贝到内存设备描述表中
StretchBlt(hMemDC,0,0,nWidth,nHeight,hScrDC,nX,nY,nWidth,nHeight,SRCCOPY);
//得到屏幕位图的句柄
hBitmap = (HBITMAP)SelectObject(hMemDC, hOldBitmap);
//
CBitmap *pBitmap;
pBitmap=NULL;
pBitmap=CBitmap::FromHandle(hBitmap); int nCX=pBitmap->GetBitmapDimension().cx;
int nCY=pBitmap->GetBitmapDimension().cy;
LONG lSize=(LONG)nCX*nCY;
::GetBitmapBits(hBitmap,lSize,szPictureInfo); //清除
DeleteDC(hMemDC);
DeleteObject(hOldBitmap);}
是下面这么取图片信息吗?
char szPictureInfo[3072];
::GetBitmapBits(hBitmap,lSize,szPictureInfo);
取出两个图的数据比如分别是szPictureInfo和szPictureInfo1
那么异或就是
for(int i=0; i<3072; i++)
{
szPictureInfo3 = szPictureInfo[i]^szPictureInfo1[i];
}然后通过SetBitmapBits把szPictureInfo3赋给第三张图
http://blog.csdn.net/fengbingchun/category/694197.aspx
呵呵
你试试PrintWindow这个函数
具体用法详见MSDN