- 按键工程师
- 742060
- 2281
- 5
- 881 朵
- 10799 个
- 580 个
- 48300
- 2011-08-18
|
1#
t
T
发表于 2015-10-08 16:52
|
|只看楼主
利用小技巧来轻松实现找图的多分辨率适配 本文由按键学院提供技术支持 按键学院交流①群(1群已满):376122403 按键学院交流②群(2群):372671254 按键学院交流③群(3群):170084238 【按键学院】安卓课程(115768679)
在安卓按键上编写脚本时,相对使用多点找色来说,使用找图的命令会更加的轻松。因为找图只要把要找的图片接取下来保存,丢到附件里就能用了,但是多点找色就会麻烦,还需要一个个的仔细的去取点,如果取的点不好还会影响之后的找色。但是找图命令一直困扰大家的问题就是多分辨率适配的问题,所以今天就给大家介绍下使用找图命令来实现多分辨率适配的小技巧 | 准备工作 找图命令 命令功能 | 查找指定的图片,支持多图、偏色、相似度查找,支持查找透明图,只返回第一个找到的坐标 |
命令参数 | 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
复制代码简单的改动下找图的函数,就可以让整体的代码大幅度的精简,同时也不用再多去判断不同分辨率下要用哪套找图代码了。这种技巧的好处就在于不用多余的去判断不同分辨率下要调用哪套找图,可以直接把图片名称传入函数即可。 - 您所在的用户组无法下载或查看附件
点评
君未觉
这有何用。
发表于 2016/11/9 11:01:34
jyz_0501
其实是标题有误导性而已,楼主所说的只是缩减代码的小技巧,相当于一个&连接符的在找图中的运用技巧。
发表于 2016/7/24 22:10:18
悲恋生1
水调歌头说的对,让人失望,楼猪,你只是把你第一个描述的方法,换了张脸而已,脑袋还没切掉,失望!
发表于 2016/7/16 22:47:53
|