• 新浪微博:
  • 微信 :
按键精灵电脑版
立即下载

软件版本:2014.05
软件大小:21.6M
更新时间:07-04

按键精灵安卓版
立即下载

软件版本:3.3.0
软件大小:62.5M
更新时间:5-24

按键精灵iOS版
立即下载

软件版本:1.3.3
软件大小:29.2M
更新时间:06-14

按键精灵Mac版
立即下载

软件版本:1.1.0
软件大小:12.3M
更新时间:12-29

快捷导航

登录 后使用快捷导航
没有帐号? 注册

登录 注册
返回列表 12345678» / 63
发新话题 回复该主题

[按键精灵安卓版] 用找图来实现多分辨率适配的技巧-【201510期】 [复制链接]

1#

利用小技巧来轻松实现找图的多分辨率适配



本文按键学院提供技术支持



按键学院交流①群(1群已满):376122403

按键学院交流②群(2群):372671254

按键学院交流③群(3群):170084238

【按键学院】安卓课程(115768679)




在安卓按键上编写脚本时,相对使用多点找色来说,使用找图的命令会更加的轻松。因为找图只要把要找的图片接取下来保存,丢到附件里就能用了,但是多点找色就会麻烦,还需要一个个的仔细的去取点,如果取的点不好还会影响之后的找色。但是找图命令一直困扰大家的问题就是多分辨率适配的问题,所以今天就给大家介绍下使用找图命令来实现多分辨率适配的小技巧

准备工作


找图命令

命令名称 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以便区分
按照这种思路来写代码的话就是这样的
  1. If w = 480 and h = 854 Then
  2. If Pic_FindPic(0, 0, 0, 0, QQ_1.png) Then
  3. TracePrint "找到QQ图标"
  4. Else
  5. TracePrint "没找到QQ图标"
  6. End If
  7. ElseIf w = 720 and h = 1280 Then
  8. If Pic_FindPic(0, 0, 0, 0, QQ_2.png) Then
  9. TracePrint "找到QQ图标"
  10. Else
  11. TracePrint "没找到QQ图标"
  12. End If
  13. ElseIf w = 1080 and h = 1920 Then
  14. .
  15. .
  16. .
  17. .

  18. End If


  19. Function Pic_FindPic(x, y, x1, y1, pic)
  20. Dim intX, intY
  21. FindPic x, y, x1, y1, "Attachment:" & pic ,"000000",0, 0.8, intX, intY
  22. If intX > -1 Then
  23. Pic_FindPic = True
  24. Else
  25. Pic_FindPic = False
  26. End If
  27. End Function
复制代码
要找一个图片的话,还需要先判断当前的分辨率,然后根据不同的分辨率来选择找不同的图片。
这样如果要想适配多分辨率,那写出来的代码就太长了,这也是很多同学放弃使用找图的原因。


接下来我就给大家普及下找图的灵活用法,可以让这种多分辨率找图的代码成倍的缩短

找图的灵活用法



首先我们需要对截取下来的特征图片进行一些不同的命名处理。命名的格式是这样的:图片名称+分辨率。 比如480*854分辨率下的特征图可以命名为:特征480854.png

这样做的好处就是好便于管理,同时也是下面这种找图代码中的核心设置
  1. Dim w = GetScreenX,h = GetScreenY
  2. ‘把横坐标和纵坐标连接起来
  3. Dim winxy = w & h

  4. Do
  5. If Pic_FindPic(0, 0, 0, 0, 特征1) Then
  6. ElseIf Pic_FindPic(0, 0, 0, 0, 特征2) Then
  7. ElseIf Pic_FindPic(0, 0, 0, 0, 特征3) Then
  8. End If
  9. Loop


  10. Function Pic_FindPic(x, y, x1, y1, pic)
  11. Dim intX, intY
  12. FindPic x, y, x1, y1, "Attachment:" & pic & winxy & ".png" ,"000000",0, 0.8, intX, intY
  13. If intX > -1 Then
  14. Pic_FindPic = True
  15. Else
  16. Pic_FindPic = False
  17. End If
  18. End Function
复制代码
简单的改动下找图的函数,就可以让整体的代码大幅度的精简,同时也不用再多去判断不同分辨率下要用哪套找图代码了。这种技巧的好处就在于不用多余的去判断不同分辨率下要调用哪套找图,可以直接把图片名称传入函数即可。


点评

君未觉  这有何用。  发表于 2016/11/9 11:01:34
jyz_0501  其实是标题有误导性而已,楼主所说的只是缩减代码的小技巧,相当于一个&连接符的在找图中的运用技巧。  发表于 2016/7/24 22:10:18
悲恋生1  水调歌头说的对,让人失望,楼猪,你只是把你第一个描述的方法,换了张脸而已,脑袋还没切掉,失望!  发表于 2016/7/16 22:47:53

    已有1评分我要评分查看所有评分

    最后编辑quitout 最后编辑于 2015-10-08 16:54:19
    本主题由 按键工程师 quitout 于 2015/10/8 17:07:57 执行 移动主题 操作
    2#

    好好学习,天天向上

    3#

    感谢分享学习

    4#

    gggogola

    5#


    6#


    7#

    我想看看怎么用的

    8#

    学习新技能

    9#

    移动话费代充,70元到账100元,招实力代理移动话费代充,70元到账100元,招实力代理移动话费代充,70元到账100元,招实力代理移动话费代充,70元到账100元,招实力代理

    10#


    11#

    这是好东西。。。学习

    12#

    我要回复!我要回复!我要回复!
    重要的事情说三遍!

    13#

    学习学习学习想学习

    14#


    15#

    我是来学习的

    16#


    17#

    浓墨重彩

    18#

    支持一下。。。

    19#

    fdsfds

    20#

    谢谢啦

    发新话题 回复该主题