当前位置:编程学习 > C/C++ >>

找图的功能用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++ 的区别是什么?相同点又是什么?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,