- 按键工程师
- 742060
- 2281
- 5
- 881 朵
- 10799 个
- 580 个
- 48300
- 2011-08-18
|
1#
t
T
发表于 2015-09-08 18:04
|
|只看楼主
带你了解多点找色、多点比色 本文由按键学院提供技术支持 按键学院交流①群(1群已满):376122403 按键学院交流②群(2群):372671254 按键学院交流③群(3群):170084238 【按键学院】安卓课程(115768679)
呜啦啦~~~~因为论坛升级改版所以按键学院的院刊停了1个月的时间,如今改版已经完成新的论坛已经上线,所以我胡汉三又带着院刊杀回来啦~~~~ 今天的院刊给大家带来的依然是安卓按键精灵的知识——多点找色FindMultiColor 、多点比色CmpColorEx 。 这两个命令可以说是安卓按键上用的最多的命令了,基本上所有的脚本都需要用到他们。所以今天就给大家详细的介绍下这两个命令,以及给大家带来一些常用的找色技巧。
|
命令名称 | FindMultiColor | 命令功能 | 根据指定的多点查找颜色坐标 | 命令参数 | x1:整数型,查找区域左上X坐标 y1:整数型,查找区域左上Y坐标 x2:整数型,查找区域右下X坐标 y2:整数型,查找区域右下Y坐标 first_color:要对比的16进制颜色,多个颜色用"|"号分隔,如果需要对比偏色则中间用“-”号分隔,比如"FFFFFF|123456-000000|00FF00-101010"sim:双精度浮点数,相似度,取值范围0-1 offset_color:字符串,偏移颜色 dir:整数型,查找方向. 0:表示从左上向右下查找; 1:表示从中心往四周查找; 2:表示从右下向左上查找; 3:表示从左下向右上查找; 4:表示从右上向左下查找; intX:变参指针,返回找到的X坐标 intY:变参指针,返回找到的Y坐标 color:字符串,16进制颜色值,格式为"BBGGRR" | 返回值 | 无 |
命令名称 | CmpColorEx | 命令功能 | 同时比较指定的多个坐标点的颜色,支持多色、偏色、相似度比较 | 命令参数 | mul_color:字符串,需要对比的点xy坐标和16进制颜色,格式为(X坐标|Y坐标|16进制颜色),多个颜色用“|”号分隔,需要偏色用“-”号分隔,多个点信息用“,”号分隔,比如"100|200|FFFFFF|123456-000000,300|500|FFFFFF" sim:双精度浮点数,相似度,取值范围0-1 | 返回值 | 整数型:返回0代表没找到,返回1代表找到 |
相同点:两者本质上都是通过对比指定的多个点上的颜色来进行判断是否符合特征,如果每个点上的颜色都符合的话就代表找到特征,只要有一个点的颜色不符合,那就代表没找到 异同点:FindMultiColor 命令是通过找到符合第一个颜色的偏移点来对比颜色的,他的特点是没有限制固定的位置,它会在设置的范围内循环符合特征的点 CmpColorEx 命令和FindMultiColor 命令正好相反,他是根据对比固定的坐标点的颜色来查找特征的。他的特点就是对象必须是在固定的坐标位置上。
|
我们来看下具体这两个命令的参数代表的意思 FindMultiColor - Dim IntX,IntY
- FindMultiColor 0,0,0,0,"FFFFFF","4|1|2F9772-000000,3|7|378757",0,0.9,intX,intY
- If intX > -1 Then
- TracePrint "找到啦,坐标在"&intX&","&intY
- Else
- TracePrint "没找到"
- End If
复制代码 参数详解:“ 0,0,0,0,” 开头这4个参数不用多说了吧,就是指定多点找色的范围的,如果是4个0的话就代表在全屏的范围内找。注意:这个范围只需要包含要找的第一个点的范围即可,不需要把所有的偏移点范围都包含进去,所以如果可以的话尽量把这个范围缩小,以提高找色的效率 "FFFFFF" 这个参数是指第一个点的颜色。找色命令会在指定的范围内逐个点进行颜色对比,找到这个颜色的点之后根据后面的偏移参数再去对比其他的点。 "4|1|2F9772-000000,3|7|378757" 这个参数是偏移点的颜色(可以附带上偏色),他是根据找到的第一个点的坐标进行x轴和y轴进行偏移对比颜色。“4|1|2F9772-000000” 就代表x轴上往右偏移4个坐标,y轴上往下偏移1个坐标,如果这个点颜色是“2F9772”则符合要求。 "0",”0.9“ 这两个参数是很常见了吧,第一个是代表了查找的方向,第二个是相似度。这两个参数是很常见的参数就不多解释了 ”intX,intY“ 这两个参数就是当命令找到符合要求的特征的时候,会把找到的特征的第一个坐标点赋值给他们。
CmpColorEx - If CmpColorEx("300|500|FFFFFF,305|505|FFFFFF",0.9) = 1 Then
- TracePrint "全部点颜色相等"
- Else
- TracePrint "有一个或多个颜色不符合"
- End If
复制代码 参数详解:"300|500|FFFFFF,305|505|FFFFFF" 参数中 ”300|500“ 就是坐标点,"FFFFFF" 就是改坐标点的颜色。命令会把参数里的坐标点和颜色进行对比,如果对比全部正确的话命令就会返回1 ”0.9“ 相似度参数,这里就不多介绍了 循环找多个特征对象因为多点找色是很常用的命令,但是这个命令的参数比较多,所以我们先把多点找色命令封装成函数,而颜色特征部分我们可以把他存放在数组里,这样可以很方便的进行调用 颜色特征可以直接通过按键抓抓来获取到,把颜色特征直接复制存放在数组里即可。 - '颜色特征存放进数组里
- Dim 特征1,特征2,特征3
- '前面四个参数是找色的范围,后面的部分是颜色的特征组
- 特征1 = Array(385,230,497,338,"FFFFFF","15|-24|DC9D0E,72|-61|2BC012,54|-16|282CD9")
- 特征2 = Array(196, 256, 346, 393, "D1C99E", "41|4|D3C32A,-59|19|9C5F10,34|103|4B402C")
- 特征3 = Array(222,488,341,589, "9FAAE0","-39|20|0E74FC,13|-3|CACFFF,39|-32|DDEAFC")
- '循环找三个特征对象
- Do
- If 多点找色(特征1) = True Then
- TracePrint "找到特征1"
- ElseIf 多点找色(特征2) = True Then
- TracePrint "找到特征2"
- ElseIf 多点找色(特征3) = True Then
- TracePrint "找到特征3"
- End If
- Delay 1000
- Loop
- '多点找色函数
- Function 多点找色(特征数组)
- Dim intx,inty
- FindMultiColor 特征数组(0),特征数组(1),特征数组(2),特征数组(3),特征数组(4),特征数组(5),0,0.9,intX,intY
- If intx > -1 Then
- 多点找色 = True
- Else
- 多点找色 = False
- End If
- End Function
复制代码多点比色的函数调用方法也是相似的 - '颜色特征存放进数组里
- Dim 特征1,特征2,特征3
- '因为多点比色命令没有范围的参数,所以直接把颜色特征组复制进来即可
- 特征1 = Array("267|524|9FAAE0,228|544|0E74FC,280|521|CACFFF,306|492|DDEAFC")
- 特征2 = Array("492|367|4A4530,517|514|342D1A,532|573|272011,477|501|FEFEFD")
- 特征3 = Array("269|504|9CABE8,238|541|25C2DE,263|592|5D5140,259|619|3F311E")
- '循环找三个特征对象
- Do
- If 多点比色(特征1) = True Then
- TracePrint "找到特征1"
- ElseIf 多点比色(特征2) = True Then
- TracePrint "找到特征2"
- ElseIf 多点比色(特征3) = True Then
- TracePrint "找到特征3"
- End If
- Delay 1000
- Loop
- '多点比色函数
- Function 多点比色(特征数组)
- If CmpColorEx(特征数组(0),0.9) = 1 Then
- 多点找色 = True
- Else
- 多点找色 = False
- End If
- End Function
复制代码 循环找多特征进阶把每个特征数组再次放入一个数组里,这样就可以通过遍历数组的方式去循环找里面的每个特征组了 - '把每个特征数组当成一个大的数组的一个元素进行存放
- Dim 特征()
- 特征(0) = Array("267|524|9FAAE0,228|544|0E74FC,280|521|CACFFF,306|492|DDEAFC")
- 特征(1) = Array("492|367|4A4530,517|514|342D1A,532|573|272011,477|501|FEFEFD")
- 特征(2) = Array("269|504|9CABE8,238|541|25C2DE,263|592|5D5140,259|619|3F311E")
- Do
- If 遍历多点比色(特征) = True Then
- TracePrint "特征找到了"
- End If
- Loop
- '遍历找多个特征
- Function 遍历多点比色(特征数组)
- For Each i In 特征数组
- If 多点比色(特征数组(i)) = True Then
- 遍历多点比色 = True
- Else
- 遍历多点比色 = False
- End If
- Next
- End Function
- '多点找色函数
- Function 多点找色(特征数组)
- If CmpColorEx(特征数组(0),0.9) = 1 Then
- 多点找色 = True
- Else
- 多点找色 = False
- End If
- End Function
复制代码 定时找色在循环找色中加入定时的机制,防止一直卡在循环里造成死循环。 - '定义进入循环的时间
- Dim MyTime = TickCount()
- Do
- If 多点比色(特征1) = True Then
- TracePrint "找到特征1"
- ElseIf 多点比色(特征2) = True Then
- TracePrint "找到特征2"
- ElseIf 多点比色(特征3) = True Then
- TracePrint "找到特征3"
- End If
- Delay 1000
- '判断如果找色的时间超过了5秒的话就退出循环
- If TickCount() - MyTime = 5000 Then
- Exit Do
- End If
- Loop
复制代码或者也可以这样写 - '定义计次变量
- Dim i = 1
- Do
- If 多点比色(特征1) = True Then
- TracePrint "找到特征1"
- ElseIf 多点比色(特征2) = True Then
- TracePrint "找到特征2"
- ElseIf 多点比色(特征3) = True Then
- TracePrint "找到特征3"
- Else
- i=i+1 '当没找到特征的时候就把变量加1
- End If
- '变量超过5就退出循环,因为设置的循环时间是1秒,所以就是超过5秒还没找到就退出循环
- If i > 5 Then
- Exit Do
- End If
- Delay 1000
- Loop
复制代码 - 您所在的用户组无法下载或查看附件
|