2023年6月21日发(作者:)

从零学起之安卓篇《按键精灵安卓版找图找⾊应⽤汇总介绍》更新20本期主题:介绍⽬前⼿机按键(按键精灵安卓版)在编写脚本中,都需要⽤到哪些⽅式进⾏图⾊识别。惯例先讲好处:1、找⾊,如何计算颜⾊相似度,解决不同款式⼿机中画⾯颜⾊差异的问题。2、找图,不太推荐,我们来聊聊多点找⾊,解决找图缓慢不效率,判断不准确的问题。科普⼩技巧:关于多点取⾊如何获取点阵特征(注意⼿机按键使⽤,多点找⾊取点不宜超过10个),请查看以下帖⼦正题⼀:找⾊,先介绍下⼿机按键⾃带的找⾊命令。固定坐标获取单点颜⾊注解:获取坐标X与Y位置的颜⾊值信息,返回存⼊变量col中。1. Dim col,x,y2. col=GetPixelColor(x,y)3. TracePrint "颜⾊=" & col复制代码区域范围查找单点颜⾊注解:变量intX, intY需要预先定义。如果您还没有定义该变量,请取消下⾯⼀⾏的注释。如果没有找到,intX和intY的值都会被置为-1,那么这⾥我们只需要判断⼀个值就可以确认是否找到。.

Dim intX, intYFindColor 0, 0, 720, 1280, "0000FF", 0, 0.9, intX, intY//如果没有找到,intX和intY的值都会被置为-1,那么这⾥我们只需要判断⼀个值就可以确认是否找到。If intX > 0 Then//如果intX⼤于0,说明找颜⾊,IntX与IntY分别表⽰这颜⾊的位置坐标TracePrint "找到颜⾊,坐标=" & intX & "," & intYElse//否则TracePrint "没找到颜⾊"End If复制代码要点讲解:如何判断两个颜⾊相似度,以便解决单点颜⾊判断上的误差问题,以下提供两个写好的函数模块给⼤家学习。函数名称:IsCol函数功能:通过计算16进制颜⾊值中的RGB平均差值,得出两个颜⾊值相似度是否到达对应百分⽐函数参数:参数1:字符串型,16进制颜⾊值参数2:字符串型,16进制颜⾊值参数3:整数型,相似度返回值:True 或 False(符合或不符合)函数范例:1.

'判断两个16进制值相似度是否到达对应百分⽐Function IsCol(col1,col2,n)IsCol=FalseDim r1,g1,b1Dim r2,g2,b2ColorToRGB col1,r1,g1,b1ColorToRGB col2,r2,g2,b2If 1 - (Abs(r1 - r2) + Abs(g1 - g2) + Abs(b1 - b2)) / 255 / 3 >= n Then IsCol=TrueEnd Function复制代码函数名称:CmpCol函数功能:获取固定坐标点16进制颜⾊值,传⼊IsCol函数进⾏相似度对⽐,得出两个颜⾊值相似度是否到达对应百分⽐函数参数:参数1:整数型,屏幕X坐标参数2:整数型,屏幕Y坐标参数3:字符串型,16进制颜⾊值返回值:True 或 False(符合或不符合)1.

'固定坐标单点模糊找⾊Function CmpCol(x,y,col,n)CmpCol=FalseIf x < 0 or y < 0 Then Exit FunctionDim temp_coltemp_col=GetPixelColor(x,y)If temp_col=col ThenCmpCol=TrueElseCmpCol=IsCol(col,temp_col,n)End IfEnd Function复制代码1.5.1新增命令介绍函数名称:CmpColor函数功能:⽐较指定坐标点(x,y)的颜⾊,⽀持多⾊、偏⾊、相似度⽐较函数参数:参数1:整数型,屏幕X坐标参数2:整数型,屏幕Y坐标参数3:字符串型,16进制颜⾊值参数4:整数型,颜⾊相似度(推荐0.9)返回值:整数型,没找到返回-1,找到返回对应颜⾊序号,从0开始调⽤范例:1.

Dim retret = CmpColor(100,200,"FFFFFF|0000FF-000000|00FF00-101010",0.9)If ret = -1 ThenTracePrint "颜⾊都不相等"ElseTracePrint "匹配颜⾊的序号为:" & retEnd if复制代码批注:如果(100,200)的颜⾊是FFFFFF,则返回0如果(100,200)的颜⾊是0000FF,则返回1如果(100,200)的颜⾊是00FF00或偏⾊在101010范围内,则返回2以此类推正题⼆:找图?不不,我是来推荐多点找⾊的,惯例先介绍下⾃带的找图命令。区域范围查找图⽚注解:变量intX, intY需要预先定义。如果您还没有定义该变量,请取消下⾯⼀⾏的注释。如果没有找到,intX和intY的值都会被置为-1,那么这⾥我们只需要判断⼀个值就可以确认是否找到。附件路径(Attachment:),由于各⾃⼿机⽂件路径各不相同,这⾥我还是推荐⽤附件路径吧,就下⾯例⼦这样。(提⽰:找图默认⽀持PNG格式,但也⽀持BMP格式)1. Dim intX, intY2. FindPic 0, 0, 0, 0, "Attachment:图⽚名称.png", "000000", 0, 0.9, intX, intY3. If intX > 0 Then4. //如果intX⼤于0,说明找颜⾊,IntX与IntY分别表⽰这颜⾊的位置坐标5. TracePrint "找到图⽚,图⽚左上⾓点位置坐标:" & intX & "," & intY1.5语法(增加偏⾊参数)6. Else7. //否则8. TracePrint "找图失败"9. End If复制代码1. Dim intX, intY2. FindPic 0, 0, 0, 0, "Attachment:图⽚名称.png", 0, 0.9, intX, intY3. If intX > 0 Then4. //如果intX⼤于0,说明找颜⾊,IntX与IntY分别表⽰这颜⾊的位置坐标5. TracePrint "找到图⽚,图⽚左上⾓点位置坐标:" & intX & "," & intY1.3语法6. Else7. //否则8. TracePrint "找图失败"9. End If复制代码要点讲解:如何提⾼⼀个图像识别的效率与精确度。⾸先想提⾼图像判断效率,那么我们得知道找图的原理⽅式,这样才能从中了解时间都耗到哪⾥去了,都做了什么,是否有什么⽅式可以减少时间,减少不必要的操作以达到节约时间⼜不影响图像判断结果。简单分析:1、确认找图都有什么步骤。2、通过哪些步骤配合得到结果。3、在不影响结果的情况下去除不必要的步骤以达到节约时间的⽬的,提⾼效率。找图原理⼤致⽅式:(我这⾥以简单通俗的⽅式描述下找图原理,可能与真实原理有些出路,请⼤家⽆视)第⼀步:全屏获取图⾊信息,获取整个屏幕所有像素点的颜⾊信息,临时保存。第⼆步:1、取要找的图⽚左上⾓第⼀个点颜⾊,进⾏范围查找单⾊,找到则临时记录那点坐标。2、以该点为起点,对图⽚剩余部分全部像素点的颜⾊信息进⾏匹配判断,如果都相同,则说明这张图⽚找到,返回值起点坐标X与Y的值。3、如果不是则继续循环扫描剩余部分,继续找符合第⼀点颜⾊的位置作为起点继续匹配,直到匹配正确或返回 -1,-1表⽰没有符合特征。第三步:释放掉第⼀步临时保存的图⾊信息。(释放内存占⽤)以上步骤了解,我们可以明确,时间都耗在整张图⽚全部点阵的匹配上了。试想下,⼀张10*10的图⽚,每次找到起点,都必须进⾏100次的信息对⽐,如果在720*1280范围找图,再没找到匹配正确的图⽚时,前⾯疑似的部分每个起点都需要进⾏100次的信息对⽐,这样整体时间就消耗掉了。那么:问⼤家⼀个简单的问题,判断⼀张图⽚是否存在的⽬的是什么,是否是判断图像中某个图像特征是否存在,⽐如某个图标?某个⽂字?某个符号?总的描述,就是⼏个颜⾊点,按照对应的形状排列起来的特征。既然:找图的⽬的只是判断⾥⾯其中⼀⼩部分图⾊信息是否匹配,那么我们为何要把整张图⽚进⾏匹配呢?结论:这⾥我们分析总结,我们其实只要确认⼀个范围内少部分颜⾊点的排列特征形状颜⾊是否匹配。通俗点⽐喻:把找图找⾊⽐喻为去仓库取物。单独执⾏找图 或 单独执⾏找⾊。全屏截图保存内存中对获取到的信息进⾏匹配,取出符合条件的信息。释放内存中临时储存信息。仓库取物。打开仓库⼤门进⼊仓库搜索制定物品搬出。关闭仓库⼤门。总结:如果我需要对当前屏幕画⾯做⼀百次或更多次找图或取⾊,直接调⽤会导致每次执⾏取⾊匹配时对全屏图像进⾏临时储存,判断,再释放,再记录再释放,增加额外不必要的资源消耗,等于去仓库取100个物品,需要开关⼀百次⼤门,完全⽆意义,以下代码中⽤到KeepCapture与ReleaseCapture命令的作⽤就是事先把⼤门⼀直开着,直到我取完物品,再关闭。总结:也许我以上墨迹可能许多新同学暂时还⽆法理解完全,但没关系,你们只要最后知道多点找⾊⽐找图⾼效精确即可。不啰嗦了,以下直接把⽬前常⽤的函数模块发出来,只想有功能⽤的同学可以 Ctrl+C → Ctrl+V 完事,想了解具体原理并学习知识的可以细细品读!有描述不当之处可以跟帖留⾔或各⼤按键群⾥给我留⾔。(本⼈联系⽅式按键各⼤群)函数名称:CmpMultiCol函数功能:固定坐标多点模糊找⾊函数参数:参数1:整数型,屏幕X坐标参数2:整数型,屏幕Y坐标参数3:字符串型,第⼀点16进制颜⾊值参数4:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)参数5:整数型,颜⾊相似度(推荐0.9)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)注意事项:由于需要对⼀张图像中做⼤量的信息对⽐来匹配出屏幕范围中是否有需要的多点特征,所以这⾥提⽰必须调⽤开头加⼊KeepCapture命令,结束时ReleaseCapture释放掉。调⽤范例:如果需要对⼀张图像做多次图⾊判断可以⽤这种调⽤⽅式拆开使⽤,节省资源。1.

'加载当前屏幕画⾯信息KeepCapture'调⽤多点找⾊命令,判断该特征是否存在区域范围中If CmpMultiCol(10,10,"FFFFFF","1|5|FFFFFF,5|10|FFFFFF",0.9)=True Then'说明找到TracePrint "找到,第⼀个点坐标:" & IntX & "," & IntYElse'否则TracePrint "没有找到"End If'释放上次画⾯加载信息,以免对⼲扰后⾯找⾊命令ReleaseCapture复制代码函数模块:1.

'固定坐标多点模糊找⾊Function CmpMultiCol(x,y,col,str,n)CmpMultiCol=FalseIntX=xIntY=yIf CmpCol(x,y,col,n)=True Then'第⼀个点颜⾊符合,调⽤MultiColor多点处理模块匹配其余点的颜⾊是否正确CmpMultiCol=MultiColor(x,y,str,n)Else'第⼀个点颜⾊不符,调⽤FindMultiCol多点找⾊模块,对该点再次进⾏⼀次⼩范围多点找⾊查找CmpMultiCol=FindMultiCol(x-3,y-3,x+3,y+3,col,str,n)End IfEnd Function复制代码原理解析:待编辑函数名称:FindMultiCol函数功能:区域范围多点找⾊函数参数:参数1:整数型,屏幕左上⾓X坐标参数2:整数型,屏幕左上⾓Y坐标参数3:整数型,屏幕右下⾓X坐标参数4:整数型,屏幕右下⾓Y坐标参数5:字符串型,第⼀点16进制颜⾊值参数6:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)参数7:整数型,颜⾊相似度(推荐0.9)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)注意事项:由于需要对⼀张图像中做⼤量的信息对⽐来匹配出屏幕范围中是否有需要的多点特征,所以这⾥提⽰必须调⽤开头加⼊KeepCapture命令,结束时ReleaseCapture释放掉。调⽤范例:如果需要对⼀张图像做多次图⾊判断可以⽤这种调⽤⽅式拆开使⽤,节省资源。1.

'加载当前屏幕画⾯信息KeepCapture'调⽤多点找⾊命令,判断该特征是否存在区域范围中If FindMultiCol(0,0,720,1280,"FFFFFF","1|5|FFFFFF,5|10|FFFFFF",0.9)=True Then'说明找到TracePrint "找到,第⼀个点坐标:" & IntX & "," & IntYElse'否则TracePrint "没有找到"End If'释放上次画⾯加载信息ReleaseCapture复制代码函数模块:1.

'区域范围多点模糊找⾊Function FindMultiCol(x1,y1,x2,y2,col,str,n)FindMultiCol=FalseDim x,yDoFindColor x1,y1,x2,y2,col,0,n,intX, intYIf intX >= 0 ThenIf MultiColor(intX,intY,str,n)=True ThenFindMultiCol=TrueExit DoElsex=IntXy=IntYDo Until x > x2FindColor x,y,x2,y,col,0,n,intX,intYIf intX >= 0 ThenIf MultiColor(intX,intY,str,n)=True ThenFindMultiCol=TrueExit FunctionElsex=IntX+1End IfElseExit DoEnd IfLoopy1=y+1End IfElseExit DoEnd IfLoop Until y1 > y2End Function复制代码原理解析:待编辑函数名称:MultiColor函数功能:处理多点点阵匹配,配合多点找⾊函数模块使⽤函数参数:参数1:整数型,起点X坐标参数2:整数型,起点Y坐标参数3:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)参数4:整数型,颜⾊相似度(推荐0.9)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)函数模块:1.

Function MultiColor(x,y,str,n)MultiColor=FalseDim arr1,i,arr2()arr1=Split(str,",")For Each i In arr1arr2=Split(i,"|")If CmpCol(x+Int(arr2(0)),y+Int(arr2(1)),arr2(2),n)=False ThenExit FunctionEnd IfNextMultiColor=TrueEnd Function复制代码原理解析:待编辑以下部分是基于以上函数模块,进⾏优化组合,请⼤家理解后根据需求使⽤,也可⾃⾏组合以上⼏个模块使⽤。函数名称:Cm函数功能:固定坐标多点找⾊函数参数:参数1:整数型,屏幕X坐标参数2:整数型,屏幕Y坐标参数3:字符串型,第⼀点16进制颜⾊值参数4:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)函数模块:1.

Function Cm(x,y,col,str)Cm=CmEx(x,y,col,str,0.9)End Function复制代码原理解析:待编辑函数名称:CmEx函数功能:固定坐标多点找⾊函数参数:参数1:整数型,屏幕X坐标参数2:整数型,屏幕Y坐标参数3:字符串型,第⼀点16进制颜⾊值参数4:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)参数5:整数型,颜⾊相似度(推荐0.9)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)函数模块:1.

Function CmEx(x,y,col,str,n)KeepCaptureCmEx=CmpMultiCol(x,y,col,str,n)ReleaseCaptureEnd Function复制代码原理解析:待编辑函数名称:Fm函数功能:区域范围多点找⾊函数参数:参数1:整数型,屏幕左上⾓X坐标参数2:整数型,屏幕左上⾓Y坐标参数3:整数型,屏幕右下⾓X坐标参数4:整数型,屏幕右下⾓Y坐标参数5:字符串型,第⼀点16进制颜⾊值参数6:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)函数模块:1.

Function Fm(x1,y1,x2,y2,col,str)Fm=FmEx(x1,y1,x2,y2,col,str,0.9)End Function复制代码原理解析:待编辑……函数名称:FmEx函数功能:区域范围多点找⾊(模糊百分⽐)函数参数:参数1:整数型,屏幕左上⾓X坐标参数2:整数型,屏幕左上⾓Y坐标参数3:整数型,屏幕右下⾓X坐标参数4:整数型,屏幕右下⾓Y坐标参数5:字符串型,第⼀点16进制颜⾊值参数6:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)参数7:整数型,颜⾊相似度(推荐0.9)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)函数模块:1.

Function FmEx(x1,y1,x2,y2,col,str,n)KeepCaptureFmEx=FindMultiCol(x1,y1,x2,y2,col,str,n)ReleaseCaptureEnd Function复制代码原理解析:待编辑……待续……20140519修正:FindMultiCol函数模块中的⼀个逻辑错误,解决特别情况下会进⼊死循环的问题。20140530修改:三个函数名称与新版(1.5)新增命令重名问题。原来名称CmpColorCmpMultiColorFindMultiColor修改名称CmpColCmpMultiColFindMultiCol20140603修正:CmpCol函数中坐标判断,避免多点找⾊偏移坐标为负数时,出现错误卡住

2023年6月21日发(作者:)

从零学起之安卓篇《按键精灵安卓版找图找⾊应⽤汇总介绍》更新20本期主题:介绍⽬前⼿机按键(按键精灵安卓版)在编写脚本中,都需要⽤到哪些⽅式进⾏图⾊识别。惯例先讲好处:1、找⾊,如何计算颜⾊相似度,解决不同款式⼿机中画⾯颜⾊差异的问题。2、找图,不太推荐,我们来聊聊多点找⾊,解决找图缓慢不效率,判断不准确的问题。科普⼩技巧:关于多点取⾊如何获取点阵特征(注意⼿机按键使⽤,多点找⾊取点不宜超过10个),请查看以下帖⼦正题⼀:找⾊,先介绍下⼿机按键⾃带的找⾊命令。固定坐标获取单点颜⾊注解:获取坐标X与Y位置的颜⾊值信息,返回存⼊变量col中。1. Dim col,x,y2. col=GetPixelColor(x,y)3. TracePrint "颜⾊=" & col复制代码区域范围查找单点颜⾊注解:变量intX, intY需要预先定义。如果您还没有定义该变量,请取消下⾯⼀⾏的注释。如果没有找到,intX和intY的值都会被置为-1,那么这⾥我们只需要判断⼀个值就可以确认是否找到。.

Dim intX, intYFindColor 0, 0, 720, 1280, "0000FF", 0, 0.9, intX, intY//如果没有找到,intX和intY的值都会被置为-1,那么这⾥我们只需要判断⼀个值就可以确认是否找到。If intX > 0 Then//如果intX⼤于0,说明找颜⾊,IntX与IntY分别表⽰这颜⾊的位置坐标TracePrint "找到颜⾊,坐标=" & intX & "," & intYElse//否则TracePrint "没找到颜⾊"End If复制代码要点讲解:如何判断两个颜⾊相似度,以便解决单点颜⾊判断上的误差问题,以下提供两个写好的函数模块给⼤家学习。函数名称:IsCol函数功能:通过计算16进制颜⾊值中的RGB平均差值,得出两个颜⾊值相似度是否到达对应百分⽐函数参数:参数1:字符串型,16进制颜⾊值参数2:字符串型,16进制颜⾊值参数3:整数型,相似度返回值:True 或 False(符合或不符合)函数范例:1.

'判断两个16进制值相似度是否到达对应百分⽐Function IsCol(col1,col2,n)IsCol=FalseDim r1,g1,b1Dim r2,g2,b2ColorToRGB col1,r1,g1,b1ColorToRGB col2,r2,g2,b2If 1 - (Abs(r1 - r2) + Abs(g1 - g2) + Abs(b1 - b2)) / 255 / 3 >= n Then IsCol=TrueEnd Function复制代码函数名称:CmpCol函数功能:获取固定坐标点16进制颜⾊值,传⼊IsCol函数进⾏相似度对⽐,得出两个颜⾊值相似度是否到达对应百分⽐函数参数:参数1:整数型,屏幕X坐标参数2:整数型,屏幕Y坐标参数3:字符串型,16进制颜⾊值返回值:True 或 False(符合或不符合)1.

'固定坐标单点模糊找⾊Function CmpCol(x,y,col,n)CmpCol=FalseIf x < 0 or y < 0 Then Exit FunctionDim temp_coltemp_col=GetPixelColor(x,y)If temp_col=col ThenCmpCol=TrueElseCmpCol=IsCol(col,temp_col,n)End IfEnd Function复制代码1.5.1新增命令介绍函数名称:CmpColor函数功能:⽐较指定坐标点(x,y)的颜⾊,⽀持多⾊、偏⾊、相似度⽐较函数参数:参数1:整数型,屏幕X坐标参数2:整数型,屏幕Y坐标参数3:字符串型,16进制颜⾊值参数4:整数型,颜⾊相似度(推荐0.9)返回值:整数型,没找到返回-1,找到返回对应颜⾊序号,从0开始调⽤范例:1.

Dim retret = CmpColor(100,200,"FFFFFF|0000FF-000000|00FF00-101010",0.9)If ret = -1 ThenTracePrint "颜⾊都不相等"ElseTracePrint "匹配颜⾊的序号为:" & retEnd if复制代码批注:如果(100,200)的颜⾊是FFFFFF,则返回0如果(100,200)的颜⾊是0000FF,则返回1如果(100,200)的颜⾊是00FF00或偏⾊在101010范围内,则返回2以此类推正题⼆:找图?不不,我是来推荐多点找⾊的,惯例先介绍下⾃带的找图命令。区域范围查找图⽚注解:变量intX, intY需要预先定义。如果您还没有定义该变量,请取消下⾯⼀⾏的注释。如果没有找到,intX和intY的值都会被置为-1,那么这⾥我们只需要判断⼀个值就可以确认是否找到。附件路径(Attachment:),由于各⾃⼿机⽂件路径各不相同,这⾥我还是推荐⽤附件路径吧,就下⾯例⼦这样。(提⽰:找图默认⽀持PNG格式,但也⽀持BMP格式)1. Dim intX, intY2. FindPic 0, 0, 0, 0, "Attachment:图⽚名称.png", "000000", 0, 0.9, intX, intY3. If intX > 0 Then4. //如果intX⼤于0,说明找颜⾊,IntX与IntY分别表⽰这颜⾊的位置坐标5. TracePrint "找到图⽚,图⽚左上⾓点位置坐标:" & intX & "," & intY1.5语法(增加偏⾊参数)6. Else7. //否则8. TracePrint "找图失败"9. End If复制代码1. Dim intX, intY2. FindPic 0, 0, 0, 0, "Attachment:图⽚名称.png", 0, 0.9, intX, intY3. If intX > 0 Then4. //如果intX⼤于0,说明找颜⾊,IntX与IntY分别表⽰这颜⾊的位置坐标5. TracePrint "找到图⽚,图⽚左上⾓点位置坐标:" & intX & "," & intY1.3语法6. Else7. //否则8. TracePrint "找图失败"9. End If复制代码要点讲解:如何提⾼⼀个图像识别的效率与精确度。⾸先想提⾼图像判断效率,那么我们得知道找图的原理⽅式,这样才能从中了解时间都耗到哪⾥去了,都做了什么,是否有什么⽅式可以减少时间,减少不必要的操作以达到节约时间⼜不影响图像判断结果。简单分析:1、确认找图都有什么步骤。2、通过哪些步骤配合得到结果。3、在不影响结果的情况下去除不必要的步骤以达到节约时间的⽬的,提⾼效率。找图原理⼤致⽅式:(我这⾥以简单通俗的⽅式描述下找图原理,可能与真实原理有些出路,请⼤家⽆视)第⼀步:全屏获取图⾊信息,获取整个屏幕所有像素点的颜⾊信息,临时保存。第⼆步:1、取要找的图⽚左上⾓第⼀个点颜⾊,进⾏范围查找单⾊,找到则临时记录那点坐标。2、以该点为起点,对图⽚剩余部分全部像素点的颜⾊信息进⾏匹配判断,如果都相同,则说明这张图⽚找到,返回值起点坐标X与Y的值。3、如果不是则继续循环扫描剩余部分,继续找符合第⼀点颜⾊的位置作为起点继续匹配,直到匹配正确或返回 -1,-1表⽰没有符合特征。第三步:释放掉第⼀步临时保存的图⾊信息。(释放内存占⽤)以上步骤了解,我们可以明确,时间都耗在整张图⽚全部点阵的匹配上了。试想下,⼀张10*10的图⽚,每次找到起点,都必须进⾏100次的信息对⽐,如果在720*1280范围找图,再没找到匹配正确的图⽚时,前⾯疑似的部分每个起点都需要进⾏100次的信息对⽐,这样整体时间就消耗掉了。那么:问⼤家⼀个简单的问题,判断⼀张图⽚是否存在的⽬的是什么,是否是判断图像中某个图像特征是否存在,⽐如某个图标?某个⽂字?某个符号?总的描述,就是⼏个颜⾊点,按照对应的形状排列起来的特征。既然:找图的⽬的只是判断⾥⾯其中⼀⼩部分图⾊信息是否匹配,那么我们为何要把整张图⽚进⾏匹配呢?结论:这⾥我们分析总结,我们其实只要确认⼀个范围内少部分颜⾊点的排列特征形状颜⾊是否匹配。通俗点⽐喻:把找图找⾊⽐喻为去仓库取物。单独执⾏找图 或 单独执⾏找⾊。全屏截图保存内存中对获取到的信息进⾏匹配,取出符合条件的信息。释放内存中临时储存信息。仓库取物。打开仓库⼤门进⼊仓库搜索制定物品搬出。关闭仓库⼤门。总结:如果我需要对当前屏幕画⾯做⼀百次或更多次找图或取⾊,直接调⽤会导致每次执⾏取⾊匹配时对全屏图像进⾏临时储存,判断,再释放,再记录再释放,增加额外不必要的资源消耗,等于去仓库取100个物品,需要开关⼀百次⼤门,完全⽆意义,以下代码中⽤到KeepCapture与ReleaseCapture命令的作⽤就是事先把⼤门⼀直开着,直到我取完物品,再关闭。总结:也许我以上墨迹可能许多新同学暂时还⽆法理解完全,但没关系,你们只要最后知道多点找⾊⽐找图⾼效精确即可。不啰嗦了,以下直接把⽬前常⽤的函数模块发出来,只想有功能⽤的同学可以 Ctrl+C → Ctrl+V 完事,想了解具体原理并学习知识的可以细细品读!有描述不当之处可以跟帖留⾔或各⼤按键群⾥给我留⾔。(本⼈联系⽅式按键各⼤群)函数名称:CmpMultiCol函数功能:固定坐标多点模糊找⾊函数参数:参数1:整数型,屏幕X坐标参数2:整数型,屏幕Y坐标参数3:字符串型,第⼀点16进制颜⾊值参数4:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)参数5:整数型,颜⾊相似度(推荐0.9)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)注意事项:由于需要对⼀张图像中做⼤量的信息对⽐来匹配出屏幕范围中是否有需要的多点特征,所以这⾥提⽰必须调⽤开头加⼊KeepCapture命令,结束时ReleaseCapture释放掉。调⽤范例:如果需要对⼀张图像做多次图⾊判断可以⽤这种调⽤⽅式拆开使⽤,节省资源。1.

'加载当前屏幕画⾯信息KeepCapture'调⽤多点找⾊命令,判断该特征是否存在区域范围中If CmpMultiCol(10,10,"FFFFFF","1|5|FFFFFF,5|10|FFFFFF",0.9)=True Then'说明找到TracePrint "找到,第⼀个点坐标:" & IntX & "," & IntYElse'否则TracePrint "没有找到"End If'释放上次画⾯加载信息,以免对⼲扰后⾯找⾊命令ReleaseCapture复制代码函数模块:1.

'固定坐标多点模糊找⾊Function CmpMultiCol(x,y,col,str,n)CmpMultiCol=FalseIntX=xIntY=yIf CmpCol(x,y,col,n)=True Then'第⼀个点颜⾊符合,调⽤MultiColor多点处理模块匹配其余点的颜⾊是否正确CmpMultiCol=MultiColor(x,y,str,n)Else'第⼀个点颜⾊不符,调⽤FindMultiCol多点找⾊模块,对该点再次进⾏⼀次⼩范围多点找⾊查找CmpMultiCol=FindMultiCol(x-3,y-3,x+3,y+3,col,str,n)End IfEnd Function复制代码原理解析:待编辑函数名称:FindMultiCol函数功能:区域范围多点找⾊函数参数:参数1:整数型,屏幕左上⾓X坐标参数2:整数型,屏幕左上⾓Y坐标参数3:整数型,屏幕右下⾓X坐标参数4:整数型,屏幕右下⾓Y坐标参数5:字符串型,第⼀点16进制颜⾊值参数6:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)参数7:整数型,颜⾊相似度(推荐0.9)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)注意事项:由于需要对⼀张图像中做⼤量的信息对⽐来匹配出屏幕范围中是否有需要的多点特征,所以这⾥提⽰必须调⽤开头加⼊KeepCapture命令,结束时ReleaseCapture释放掉。调⽤范例:如果需要对⼀张图像做多次图⾊判断可以⽤这种调⽤⽅式拆开使⽤,节省资源。1.

'加载当前屏幕画⾯信息KeepCapture'调⽤多点找⾊命令,判断该特征是否存在区域范围中If FindMultiCol(0,0,720,1280,"FFFFFF","1|5|FFFFFF,5|10|FFFFFF",0.9)=True Then'说明找到TracePrint "找到,第⼀个点坐标:" & IntX & "," & IntYElse'否则TracePrint "没有找到"End If'释放上次画⾯加载信息ReleaseCapture复制代码函数模块:1.

'区域范围多点模糊找⾊Function FindMultiCol(x1,y1,x2,y2,col,str,n)FindMultiCol=FalseDim x,yDoFindColor x1,y1,x2,y2,col,0,n,intX, intYIf intX >= 0 ThenIf MultiColor(intX,intY,str,n)=True ThenFindMultiCol=TrueExit DoElsex=IntXy=IntYDo Until x > x2FindColor x,y,x2,y,col,0,n,intX,intYIf intX >= 0 ThenIf MultiColor(intX,intY,str,n)=True ThenFindMultiCol=TrueExit FunctionElsex=IntX+1End IfElseExit DoEnd IfLoopy1=y+1End IfElseExit DoEnd IfLoop Until y1 > y2End Function复制代码原理解析:待编辑函数名称:MultiColor函数功能:处理多点点阵匹配,配合多点找⾊函数模块使⽤函数参数:参数1:整数型,起点X坐标参数2:整数型,起点Y坐标参数3:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)参数4:整数型,颜⾊相似度(推荐0.9)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)函数模块:1.

Function MultiColor(x,y,str,n)MultiColor=FalseDim arr1,i,arr2()arr1=Split(str,",")For Each i In arr1arr2=Split(i,"|")If CmpCol(x+Int(arr2(0)),y+Int(arr2(1)),arr2(2),n)=False ThenExit FunctionEnd IfNextMultiColor=TrueEnd Function复制代码原理解析:待编辑以下部分是基于以上函数模块,进⾏优化组合,请⼤家理解后根据需求使⽤,也可⾃⾏组合以上⼏个模块使⽤。函数名称:Cm函数功能:固定坐标多点找⾊函数参数:参数1:整数型,屏幕X坐标参数2:整数型,屏幕Y坐标参数3:字符串型,第⼀点16进制颜⾊值参数4:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)函数模块:1.

Function Cm(x,y,col,str)Cm=CmEx(x,y,col,str,0.9)End Function复制代码原理解析:待编辑函数名称:CmEx函数功能:固定坐标多点找⾊函数参数:参数1:整数型,屏幕X坐标参数2:整数型,屏幕Y坐标参数3:字符串型,第⼀点16进制颜⾊值参数4:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)参数5:整数型,颜⾊相似度(推荐0.9)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)函数模块:1.

Function CmEx(x,y,col,str,n)KeepCaptureCmEx=CmpMultiCol(x,y,col,str,n)ReleaseCaptureEnd Function复制代码原理解析:待编辑函数名称:Fm函数功能:区域范围多点找⾊函数参数:参数1:整数型,屏幕左上⾓X坐标参数2:整数型,屏幕左上⾓Y坐标参数3:整数型,屏幕右下⾓X坐标参数4:整数型,屏幕右下⾓Y坐标参数5:字符串型,第⼀点16进制颜⾊值参数6:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)函数模块:1.

Function Fm(x1,y1,x2,y2,col,str)Fm=FmEx(x1,y1,x2,y2,col,str,0.9)End Function复制代码原理解析:待编辑……函数名称:FmEx函数功能:区域范围多点找⾊(模糊百分⽐)函数参数:参数1:整数型,屏幕左上⾓X坐标参数2:整数型,屏幕左上⾓Y坐标参数3:整数型,屏幕右下⾓X坐标参数4:整数型,屏幕右下⾓Y坐标参数5:字符串型,第⼀点16进制颜⾊值参数6:字符串型,符合偏移点颜⾊组(相对第⼀点位置偏移X坐标|相对第⼀点位置偏移Y坐标|16进制颜⾊)参数7:整数型,颜⾊相似度(推荐0.9)返回值:True 或 False(符合或不符合,坐标保存在intX与intY)函数模块:1.

Function FmEx(x1,y1,x2,y2,col,str,n)KeepCaptureFmEx=FindMultiCol(x1,y1,x2,y2,col,str,n)ReleaseCaptureEnd Function复制代码原理解析:待编辑……待续……20140519修正:FindMultiCol函数模块中的⼀个逻辑错误,解决特别情况下会进⼊死循环的问题。20140530修改:三个函数名称与新版(1.5)新增命令重名问题。原来名称CmpColorCmpMultiColorFindMultiColor修改名称CmpColCmpMultiColFindMultiCol20140603修正:CmpCol函数中坐标判断,避免多点找⾊偏移坐标为负数时,出现错误卡住