第一次发帖,没什么经验,排版可能没那么好看~
安卓按键精灵大家都知道脚本找色比色会比找图更快,但是一个点一个点的手动取色也太麻烦了~
于是有了这个自动取色教程(说不准以后就是脚本自动写脚本了
)
找色找图的原理实现很多大佬都已经说过了,我们的任务就是找当前界面唯一或者较少特征,这里就不说那么多废话啦,直接上实战~
既然是自动取色,那么我们首先得知道,助手帮你生成的数据是怎么来滴~
我们把助手的数据复制一下出来看看,不同命令的格式以及数据如何生成的
多点找色:
- "1E841E","14|-1|2E942E,41|17|82C693,47|14|C6D7D7,67|-8|D2E3D2,-14|11|CECECE,13|0|1A801A"
复制代码多点比色:
- "280|1108|1E841E,294|1107|2E942E,321|1125|82C693,327|1122|C6D7D7,347|1100|D2E3D2,266|1119|CECECE,293|1108|1A801A"
复制代码我们可以看到
找色第一个数据是我们采集第一个点的颜色值,后面的格式为第一个坐标的偏移坐标加上颜色值
比色的格式是坐标值加上颜色值
上代码~
- [hide]Dim 范围 = Array(295,1088,393,1126) //设定我们取色的范围 不建议范围太大 太小~
- Dim 中心坐标 = Array(346,1106) //设定取色中心点 可用作后续的点击
- Dim 唯一特征差值 = 2 //有些情况下唯一颜色太少了,需要设置大一点,不过唯一颜色数据越多找得越准确
- Dim 找色范围扩大值 = 50 //自动生成的找色范围值,注意不要超过屏幕范围
- Dim 比色底色 = Array()
- Dim 找色底色 = Array()
- Dim 底色取值 = 0
- Dim 已随机列表()
- Dim result = EnableFastCapture(true)
- If result Then
- TracePrint "快速取色开启"
- End If
- KeepCapture //截取屏幕
- For i = 范围(0) To 范围(2)
- For k = 范围(1) To 范围(3) //双循环遍历每个点的图色数据
- Dim rColor = GetPixelColor(i, k,0)
- Dim 颜色数量 = GetColorNum(范围(0), 范围(1), 范围(2), 范围(3), rColor, 1.0)
- If 颜色数量 < 唯一特征差值 Then
- //TracePrint "这个点的颜色为:" & rColor
- 比色底色(底色取值) = i & "|" & k & "|" & rColor
- 找色底色(底色取值) = 坐标计算(中心坐标(0), i) & "|" & 坐标计算(中心坐标(1), k) & "|" & rColor
- 底色取值 = 底色取值 + 1
- End If
- Next
- Next
- ReleaseCapture //释放屏幕
- TracePrint 比色数据(10)
- TracePrint 找色数据(10)
- TracePrint 范围(0) - 找色范围扩大值 & "," & 范围(1) - 找色范围扩大值 & "," & 范围(2) + 找色范围扩大值 & "," & 范围(3) + 找色范围扩大值 & "," & 找色数据(10)
- Function 坐标计算(锚定坐标, 相差坐标)
- 坐标计算 = 相差坐标 - 锚定坐标
- End Function
- Function 比色数据(特征次数)
- 比色数据 = ""
- Dim 随机数, 比色列 = ""
- For i = 0 To 特征次数 - 1
- 随机数 = 生产随机数(0, UBOUND(比色底色))
- If 检测是否重复(随机数) <> "" Then
- If i = 特征次数 - 1 Then
- 比色列 = 比色列 & 比色底色(随机数)
- Else
- 比色列 = 比色列 & 比色底色(随机数) & ","
- End If
-
- End If
- Next
- 比色数据 = """" & 比色列 & """"
- End Function
- Function 找色数据(特征次数)
- 找色数据 = ""
- Dim 随机数, 找色列 = ""
- For i = 0 To 特征次数 - 1
- 随机数 = 生产随机数(0, UBOUND(找色底色))
- If 检测是否重复(随机数) <> "" Then
- If i = 特征次数 - 1 Then
- 找色列 = 找色列 & 找色底色(随机数)
- Else
- 找色列 = 找色列 & 找色底色(随机数) & ","
- End If
-
- End If
- Next
- 找色数据 = """" & GetPixelColor(中心坐标(0), 中心坐标(1),0) & """,""" & 找色列 & """"
- End Function
- Function 生产随机数(i, j)
- 生产随机数 = Int((j - i + 1) * Rnd() + i)
- End Function
- Function 检测是否重复(数据)
- 检测是否重复 = ""
- For i = 0 To UBound(已随机列表)
- If 数据 = 已随机列表(i) Then
- TracePrint "重复"
- Exit Function
- End If
- Next
- 检测是否重复 = 数据
- End Function[/hide]
复制代码好啦,现在设定范围和坐标就可以愉快的让脚本帮你取最优的特征了~配合GK插件食用更方便~
题外话,可以自己写个插件输出去掉烦人的脚本提示,插件代码如下:
- [hide]function QMPlugin.TracePrint(...)
- LuaAuxLib.TracePrint(...)
- end[/hide]
复制代码替换上面安卓取色找色代码输出的 TracePrint 就可以了~