找图的问题

suifengjz 2017-04-29 07:25:47
关于找图的相关问题,图片下面有个窗口的时候找不到图,但是右边的那个图后面什么都没有的可以找到,请问这是什么原因呢,该怎么解决呢
...全文
209 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-05-02
  • 打赏
  • 举报
回复
参考开源http://www.autohotkey.com源代码中ImageSearch功能。
suifengjz 2017-04-30
  • 打赏
  • 举报
回复
附上源码地址
http://www.vcchar.com/thread-1965-1-1.html
suifengjz 2017-04-29
  • 打赏
  • 举报
回复
/**获得屏幕图片的相关信息**/ 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); }
suifengjz 2017-04-29
  • 打赏
  • 举报
回复
引用 楼主 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); }

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧