user-0 提问: 找图的问题

回复:
user: user-1
content: 参考开源http://www.autohotkey.com源代码中ImageSearch功能。

user: user-0
content: 附上源码地址 http://www.vcchar.com/thread-1965-1-1.html

user: user-0
content: /**获得屏幕图片的相关信息**/ void GetScreenData(int dx,int dy) {  	HBITMAP   hBitmap,hOld;         //图片句柄 	HDC   hDC,hcDC;                 //设备DC 	BITMAPINFO   b;                 //图片数据信息 	HANDLE   hp;                    //句柄  	dwX=GetSystemMetrics(SM_CXSCREEN);          //屏幕的宽度 	dwY=GetSystemMetrics(SM_CYSCREEN);          //屏幕的高度  	dwX=min(dwX,(unsigned)dx);      //取给定宽度与获得宽度的最小那个 	dwY=min(dwY,(unsigned)dy);      //取给定高度与获得高度的最小那个 	hDC=::GetWindowDC(NULL);        //获得一个设备DC 	hcDC=CreateCompatibleDC(hDC); 	hBitmap=CreateCompatibleBitmap(hDC,dwX,dwY);   //在DC中创建一个兼容DC图片缓冲区 	hOld=(HBITMAP)SelectObject(hcDC,hBitmap);      //将hcDc选择到设备中去 	BitBlt(hcDC,0,0,dwX,dwY,hDC,0,0,SRCCOPY);       //将hDc中的像素直接复制到hcDc中 	/*设置屏幕图片的信息*/ 	bb.bmWidth=dwX;       //宽度 	bb.bmHeight=dwY;      //高度 	bb.bmPlanes=1;         //绘图面板数，一般为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;                            //图像的位数，24真彩色 	b.bmiHeader.biCompression   =   BI_RGB;                  //指定的压缩算法(格式)，BI_RGB不压缩 	b.bmiHeader.biSizeImage   =   0;                        //图片实际大小，宽*高*byte，指定了BI_RGB就为0  	b.bmiHeader.biXPelsPerMeter   =   0;                    //每米包含的像素数 	b.bmiHeader.biYPelsPerMeter   =   0;  	b.bmiHeader.biClrUsed   =   0;                         //使用的颜色数，0表示使用全部颜色 	b.bmiHeader.biClrImportant   =   0;                    //重要的颜色数,0表示全部重要  	/*颜色表**/ 	b.bmiColors[0].rgbBlue=8;                               //蓝色值 	b.bmiColors[0].rgbGreen=8;                              //绿色值 	b.bmiColors[0].rgbRed=8;                                //红色值 	b.bmiColors[0].rgbReserved=0;                           //保留 	//在堆上分配空间 	hp=GetProcessHeap(); 	lpBufscr=(char *)HeapAlloc(hp,HEAP_ZERO_MEMORY,bb.bmHeight*bb.bmWidth*4);  	GetDIBits(hcDC,hBitmap,0,dwY,lpBufscr,&b,DIB_RGB_COLORS);                    //获取指定兼容位图的位,在hcDc上  	//释放申请的DC 	ReleaseDC(NULL,hDC); 	DeleteDC(hcDC); 	DeleteObject(hBitmap); 	DeleteObject(hOld); 	//	HeapFree(hp,0,lpBufscr);  }

user: user-0
content: 引用 楼主 suifengjz 的回复:关于找图的相关问题，图片下面有个窗口的时候找不到图，但是右边的那个图后面什么都没有的可以找到，请问这是什么原因呢，该怎么解决呢/**获得图片信息**/ void GetBmpData(LPCTSTR lpszName) { 	HANDLE hp; 	HDC hdc,hdcmem; 	HBITMAP hBm;  	BITMAPINFO   b; 	//加载图片 	hBm=(HBITMAP)LoadImage(GetModuleHandle(0),/*"c:\\1.bmp"*/lpszName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE); 	if(hBm==NULL) 		{ 			 			MessageBox(NULL, L"LoadImage Errorm,未加载图片，坐标可能不正确 !", TEXT("Error"), MB_OK); 				// return FALSE; 		}  	GetObject(hBm,sizeof(BITMAP),(LPVOID)&bm); //获得句柄 	hdc=::GetWindowDC(NULL); 	hdcmem=CreateCompatibleDC(hdc); 	SelectObject(hdcmem,hBm); 	BitBlt(hdcmem,0,0,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY); 	b.bmiHeader.biSize   =   sizeof(BITMAPINFOHEADER); 	b.bmiHeader.biWidth=bm.bmWidth; 	b.bmiHeader.biHeight=bm.bmHeight; 	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(); 	lpBufbmp=(char *)HeapAlloc(hp,HEAP_ZERO_MEMORY,bm.bmHeight*bm.bmWidth*4); 	GetDIBits(hdc,hBm,0,bm.bmHeight,lpBufbmp,&b,DIB_RGB_COLORS);  	DeleteObject(&hBm); 	DeleteDC(hdc); 	DeleteDC(hdcmem); }