找图的功能用C或C++的实现方法
昨天的好像放错地方了,都没人回答。重新发了下。请问按键精灵找图的功能用C或C++如何实现。望高手指点一下。有代码最好,如果不行给点思路也可以。谢谢了。
追问:VBSCall Call FindPic(0,50,1023,767,"Attachment:\神盾.bmp",0.9,intX,intY)这是按键精灵附件找图的语句。
(取点是: VBSCall GetColor=GetPixelColor(X,Y) 这个API命令可以实现的,但找图不知道如何中实现。)
答案:不知道按键精灵找图片的效率如何,不过我知道准确度好像不高~~~用c++可以用GetPixel这个API来找图片,基本流程是匹配图片上的每一个点和屏幕上的每一个点,可是这样的效率不高,不过一定可以得出结果是否找到。另如“暗雪飞龙”所说,bmp图片解析是比较简单的,其他图片格式需要复杂一点的操作~~~
下面是一个简单的示例,方法比较笨,不过胜在有效:),在vc6中编译通过~~~
bool FindPic(CString FileName)
{
CString result = "";
CBitmap bmp;
BITMAP bm;
HBITMAP hBmp;
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;
}
按键精灵我也用过一段时间啊,不记得有什么找图的功能,只有屏幕上取像素点。
上一个:JAVA,C++,VB等编程语言的不同之处?
下一个:bat vbs c++ 的区别是什么?相同点又是什么?