在安卓按键上编写脚本时,相对使用多点找色来说,使用找图的命令会更加的轻松。因为找图只要把要找的图片接取下来保存,丢到附件里就能用了,但是多点找色就会麻烦,还需要一个个的仔细的去取点,如果取的点不好还会影响之后的找色。但是找图命令一直困扰大家的问题就是多分辨率适配的问题,所以今天就给大家介绍下使用找图命令来实现多分辨率适配的小技巧
准备工作
找图命令
命令名称FindPic命令功能查找指定的图片,支持多图、偏色、相似度查找,支持查找透明图,只返回第一个找到的坐标命令参数x1:整数型,查找区域左上X坐标
y1:整数型,查找区域左上Y坐标
x2:整数型,查找区域右下X坐标
y2:整数型,查找区域右下Y坐标
pic_name:字符串,要找的图片名字,多个图片用“|”号分隔
delta_color:16进制字符串,偏色
sim:双精度浮点数,相似度,取值范围0-1
dir:整数型,查找方向:
0:表示从左上向右下查找;
1:表示从中心往四周查找;
2:表示从右下向左上查找;
3:表示从左下向右上查找;
4:表示从右上向左下查找;
intX:变参指针,返回找到的X坐标
intY:变参指针,返回找到的Y坐标
返回值返回找到的图片的序号,从0开始索引.如果没找到返回-1
截取特征图
可以在电脑上使用安卓模拟器,设置成不同的分辨率,然后把每个分辨率下的特征图片分别截取下来保存
因为在不同分辨率下图片的像素点数量和间隔是不同的,所以无法直接通过比例的计算来准确转换,即使能转换成功率也比较低。所以需要在不同分辨率下分别截取特征图保存
编写找图函数
一般正常的多分辨率找图思路是这样的:
先把特征图片进行重命名,同一个特征在名称上加上一些编号之类的标记来区分,比如要找QQ图标,那QQ图标的不同分辨率下的图片会命名成:QQ_1、QQ_2、QQ_3以便区分
按照这种思路来写代码的话就是这样的
- If w = 480 and h = 854 Then
- If Pic_FindPic(0, 0, 0, 0, QQ_1.png) Then
- TracePrint "找到QQ图标"
- Else
- TracePrint "没找到QQ图标"
- End If
- ElseIf w = 720 and h = 1280 Then
- If Pic_FindPic(0, 0, 0, 0, QQ_2.png) Then
- TracePrint "找到QQ图标"
- Else
- TracePrint "没找到QQ图标"
- End If
- ElseIf w = 1080 and h = 1920 Then
- .
- .
- .
- .
- End If
- Function Pic_FindPic(x, y, x1, y1, pic)
- Dim intX, intY
- FindPic x, y, x1, y1, "Attachment:" & pic ,"000000",0, 0.8, intX, intY
- If intX > -1 Then
- Pic_FindPic = True
- Else
- Pic_FindPic = False
- End If
- End Function
复制代码
要找一个图片的话,还需要先判断当前的分辨率,然后根据不同的分辨率来选择找不同的图片。
这样如果要想适配多分辨率,那写出来的代码就太长了,这也是很多同学放弃使用找图的原因。
接下来我就给大家普及下找图的灵活用法,可以让这种多分辨率找图的代码成倍的缩短
找图的灵活用法
首先我们需要对截取下来的特征图片进行一些不同的命名处理。命名的格式是这样的:图片名称 分辨率。 比如480*854分辨率下的特征图可以命名为:特征480854.png
这样做的好处就是好便于管理,同时也是下面这种找图代码中的核心设置
- Dim w = GetScreenX,h = GetScreenY
- ‘把横坐标和纵坐标连接起来
- Dim winxy = w & h
- Do
- If Pic_FindPic(0, 0, 0, 0, 特征1) Then
- ElseIf Pic_FindPic(0, 0, 0, 0, 特征2) Then
- ElseIf Pic_FindPic(0, 0, 0, 0, 特征3) Then
- End If
- Loop
- Function Pic_FindPic(x, y, x1, y1, pic)
- Dim intX, intY
- FindPic x, y, x1, y1, "Attachment:" & pic & winxy & ".png" ,"000000",0, 0.8, intX, intY
- If intX > -1 Then
- Pic_FindPic = True
- Else
- Pic_FindPic = False
- End If
- End Function
复制代码
简单的改动下找图的函数,就可以让整体的代码大幅度的精简,同时也不用再多去判断不同分辨率下要用哪套找图代码了。这种技巧的好处就在于不用多余的去判断不同分辨率下要调用哪套找图,可以直接把图片名称传入函数即可。
,