余辉脉脉 发表于 2021-10-6 09:32:03

找图的功能用C或C++的实现方法

用c++可以用GetPixel这个API来找图片,基本流程是匹配图片上的每一个点和屏幕上的每一个点,可是这样的效率不高,不过一定可以得出结果是否找到。
另如“暗雪飞龙”所说,bmp图片解析是比较简单的,其他图片格式需要复杂一点的操作~~~
下面是一个简单的示例,方法比较笨,不过胜在有效,在vc6中编译通过~~~


bool FindPic(CString FileName)
{
    CString result = "";
    CBitmap bmp;
    BITMAP   bm;
    HBITMAPhBmp;
    CDC   bmpDC;
    hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),FileName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    bmp.DeleteObject();
    bmp.Attach( hBmp );
    bmp.GetObject(sizeof(BITMAP),&bm);
    bmpDC.CreateCompatibleDC(NULL);
    bmpDC.SelectObject(&bmp); //图片DC
    HDC hScreenDC = ::GetDC(NULL); //屏幕DC
    bool found = false;//是否匹配到
    bool next = false;//是否找下一个点
    for (int i = 0;i<1280 && !found;i++)
    {
      for (int j = 0 ; j<1024 && !found;j++)
      {
            next = false;
            for (int a = 0;a<30 && !next;a++)
            {
                for (int b = 0;b<30&&!next;b++)
                {
                  if(GetPixel(hScreenDC,i+a,j+b) != bmpDC.GetPixel(a, b))
                  {
                        next = true;//找屏幕中下一个点
                  }
                }
            }
            if (!next)//找到点
            {
                found = true;
                result.Format("(%d,%d)",i,j);
                return true;
                break;
            }
      }
    }
    return false;
}
页: [1]
查看完整版本: 找图的功能用C或C++的实现方法