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

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

按键精灵安卓版
立即下载

软件版本:3.2.9
软件大小:62.5M
更新时间:12-07

按键精灵iOS版
立即下载

软件版本:1.3.1
软件大小:29.2M
更新时间:09-29

按键精灵Mac版
立即下载

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

快捷导航

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

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

[教程心得] 【山海教程】【零基础学按键】学习了解找图命令 [复制链接]

1#


零基础,轻松学习安卓按键,大家好,我是山海师~~~

上一篇教程我们学习了常用的多点找色和多点比色的命令. 在安卓的脚本中最常用的就是这两个命令. 今天就给大家介绍下虽然不是很常用,但是也是非常重要的图色相关的命令

>>>>总目录贴入口<<<<


FindPic



命令名称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

找图命令的准备工作:
1. 把目标图片截取下, 并且保存成PNG格式的图片文件
2. 把图片添加到助手附件中,或者是放在手机的路径中
  1. Dim intX, intY
  2. //当图片在附件当中时:
  3. FindPic 0, 0, 0, 0, "Attachment:PIC.png","000000",0, 0.8, intX, intY
  4. If intX >-1 then
  5. TracePrint "找到啦,坐标是"&intX&","&intY
  6. Else
  7. TracePrint "没找到"
  8. End If
  9. //当图片是在手机的SD卡路径中时
  10. FindPic 0, 0, 0, 0, "/sdcard/PIC.png","000000",0, 0.8, intX, intY
  11. If intX >-1 then
  12. TracePrint "找到啦,坐标是"&intX&","&intY
  13. Else
  14. TracePrint "没找到"
  15. End If
复制代码
透明图:
在找图命令中有个透明图的概念. 它其实就是指对要找的图片进行了一些特殊处理.
当图片4个角的颜色颜色都相同时,按键会自动把图片中这种颜色当成透明色.


这个图片的四个角的颜色不一致,所以在找图的时候会当成普通的图片进行查找


这个图片中四个角的颜色都是黄色("FFE952") 所以按键在找图的时候会自动忽略掉这个黄色, 只对图片中的其他的颜色进行匹配.
透明图常常会被用于在一些背景会发生变化的场景中找特征.

SnapShot




命令名称SnapShot
命令功能截屏并保存为PNG文件
命令参数file_name:字符型,文件名(即截取范围图片后,要保存的路径)
x1:整数型,区域左上角x坐标
y1:整数型,区域左上角y坐标
x2:整数型,区域右下角x坐标
y2:整数型,区域右下角y坐标
返回值

截图命令使用方法很简单, 可以截取整张屏幕保存成图片, 也可以支持截取部分屏幕保存成图片.
  1. //截图整个屏幕信息
  2. SnapShot "/sdcard/PIC.png"
  3. //截图部分屏幕
  4. SnapShot "/sdcard/PIC.png", 200, 300, 450, 600
  5. //连续截屏保存成不同的图片
  6. For i = 1 To 5
  7. SnapShot "/sdcard/PIC_" & i & ".png",200, 300, 450, 600
  8. Next
复制代码


KeepCapture\ReleaseCapture




命令名称KeepCapture
命令功能截取当前屏幕内容保留在内存,随后执行的图色函数均从内存中快速查找,直到用 ReleaseCapture 删除内存中的截图
命令参数
返回值


命令名称ReleaseCapture
命令功能释放(即删除)保留在内存中的屏幕内容截图
命令参数
返回值

这两个命令一般都是成对出现的. 利用好他们对于提升脚本找图找色的效率有很大的帮助
在按键机制中在运行到找图找色命令的时候就会自动截取屏幕的信息. 所以当你循环找多个特征的时候就会发现效率很慢.
我们可以通过一个简单的代码来测试下效率

  1. Dim intX,intY
  2. Dim t=TickCount()
  3. For 50
  4. FindMultiColor 349,705,488,836, "6363F1","-41|27|97E6F6,-72|-8|84D5BA,-40|-61|EFF3F2", 0, 0.9, intX, intY
  5. If intX > -1 And intY > -1 Then
  6. End If
  7. Next
  8. TracePrint TickCount()-t
复制代码
通过运行上面代码我们可以得到在找色50次所花费的时间大概在1500ms左

右. 这单独看起来可能没什么. 但是放在实际的脚本中就会很影响比较的效率了.
我们再来看下使用了截图至内存命令之后的效率
  1. Dim intX,intY
  2. Dim t=TickCount()
  3. KeepCapture
  4. For 50
  5. FindMultiColor 349,705,488,836, "6363F1","-41|27|97E6F6,-72|-8|84D5BA,-40|-61|EFF3F2", 0, 0.9, intX, intY
  6. If intX > -1 And intY > -1 Then
  7. End If
  8. Next
  9. ReleaseCapture
  10. TracePrint TickCount()-t
复制代码
最终输出的所花费的时间不到100ms. 这就是效率上的差距.

在没使用截图至内存的命令之前, 每次找色的时候都会自动截屏一次, 循环50次就相当于截屏了50次. 所以耗费时间就多. 当在循环开始前使用KeepCapture

命令, 就是把当前屏幕的像素信息先收集到内存中, 之后的找色命令全部由内存里取 不会再截取屏幕,所以找色就会快很多了.
注意: 截图至内存的命令其实是一把双刃剑, 用的好的话可以极大的提升效率. 但是如果用不好就会造成一些问题. 在使用了KeepCapture 命令之后 所有的找色命令使用的图色信息都会直接从内存中获取, 屏幕上的变化就不会影响到找色命令了, 所以如果需要在新的画面中进行找色的话一定要记得用ReleaseCapture 释放内存中的截图才行

***** 该内容需您回复才可浏览 *****

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

    本主题由 版主 gljxsd 于 2018/2/7 14:25:46 执行 删除帖子 操作
    2#

    写的不错呢,学习到了~~~支持一下

    3#

    请问在启用后keepcature后第一次查图会保存截屏至内存,第二是查图如果范围缩小了(我的意思第二次截图在第一次范围内缩小了) keepcature功能还有效么?

    4#

    3QQQQQ

    5#

    写的不错呢,学习到了

    6#

    分析法哈哈

    7#

    写的不错呢,学习到了~~~支持一下

    8#

    学习了

    9#

    我要看看看看看看看啊

    10#

    汇丰覅uebfidhwf

    11#

    多谢楼主分享。。。

    12#

    好的方法

    13#

    这一段太棒了

    14#

    看看看看

    15#

    我现在

    16#

    RE:【山海教程】【零基础学按键】学习了解找图命令修改

    17#

    支持......

    18#

    该内容需您回复才可浏览

    19#

    给各个国家经济

    20#

    顶顶顶顶顶顶顶顶顶顶顶顶顶

    发新话题 回复该主题