大家好,我是公众号3分钟学堂的郭立员,如果你喜欢我的文章,欢迎进入我的公众号介绍页面,点击右上角3个点,星标我的公众号,可以第一时间收到我的文章更新通知。

键盘截图_截图键盘按哪个键_截图键盘快捷键

前言

其实我在做脚本的时候很少用动图,如果要查找点击屏幕上的动图,我可能会用两个思路解决:

①、看屏幕中有没有和动图相对距离固定的静态图,如果有的话就先找静态图,之后通过坐标偏移获取到动图的位置坐标。

②、缩小截图,截取动图中相对不变的部分,当然前提是动图中有相对不变的部分。

当上面两种思路都行不通时,就不得不考虑找动图了。

一、什么是动态图

在屏幕上我们看到无外乎这几种图像,静态图、动态图、视频

静态图:屏幕上不变的文字、图片都可以叫静态图

动态图:少量静态图重复显示,这里静态图还可以称之为“帧”

视频:大量静态图快速连续播放,最低帧率25帧,也就是每秒播放25张静态图,这个速度人眼看到视频画面才不会卡顿。

动态图和视频有两个不同点:

①少量图片

②循环显示

因为这两个特点所以动态图比视频的文件要小很多。

最常见的动态图就是聊天工具中的表情包,一个动作重复播放。

二、一个动图到底有多少帧

这个问题的答案是不知道,上面我解释动态图时说的少量,一个动态图最少帧数是2,也就是2个图片来回切换,最多就没有限制了,当然图片多了带来的缺点就是图片文件特别大,播放很卡,甚至无法播放。

三、怎么知道屏幕上某个范围动图的帧数

屏幕的动图可能是单一动图,也可能是多个半透明动图的叠加,情况就很复杂。

我这里想到的方法是快速截图,之后去除重复帧,说一个例子,如下图所示,我要获取企鹅嘴部的位置坐标。

截图键盘快捷键_截图键盘按哪个键_键盘截图

①快速截图,这里使用snapshot命令,测试截取较小图时,100张图耗时5秒,换算成帧率是20帧,这个帧率不算高,只能是通过多截图来弥补一下。

dim t=TickCount()dim path="/sdcard/pictures/dtu/"For i = 1 To 100  SnapShot path & i & ".png", 168,881,206,902NextTracePrint "耗时",TickCount()-t

截图键盘快捷键_键盘截图_截图键盘按哪个键

②对上面100张图片进行去重(本期文章想要讲的核心知识点)

Import "cjson.lua"dim path="/sdcard/pictures/dtu/"dim arr(),n=0,imgFor i = 1 To 100    img = cjson.Encode(Image.GetPicData(path & i & ".png"))    img = Replace(img, "[", "")    img=Replace(img,"]","")    If Len(arr) = 0 Then         arr(n) = img        n=n+1    Else         For j = 0 To UBOUND(arr)            If arr(j) = img Then             dir.Delete path & i & ".png"              Exit For            End If            If j = UBOUND(arr) Then               arr(n) = img              n=n+1            End If        Next    End If
Next

代码的思路:

先获取每一张图片的颜色信息,然后把颜色信息存入一个数组中,存储之前比较一下要存入的颜色信息在数组中是否存在,如果存在说明该颜色信息对应的图片是重复图片直接删除,这样经过筛选就把不重复的图片保留下来了。

上面截的100张图经过筛选后的仅剩下5张。

也就是说如果做成动图,企鹅嘴部的动图效果仅需要5帧。

特别说明一下,对于脚本来说100张图和5张图其实都能达到找图效果,不同之处是效率,找5张图必然比找100张图效果更高,通过如果把图片放入脚本附件,5张图的脚本文件体积更小。

四、如何使用找动图

我截图100张,然后筛选去重得到5张图并不是我最终的目的,我的目的是要知道我截图的位置坐标,说的直白点就是要达到普通找图命令的功能。

这里涉及到找多图的知识点,有2个方法,假设把多张图都放入到脚本附件中。

其一,找图命令自带多图参数写法,多图之间用“|”分隔。

Attachment:1.png|Attachment:12.png|Attachment:14.png|Attachment:2.png|Attachment:3.png

其二,通过循环找图

提前把图片做成有规律的名称,比如1.png、2.png或者A1.png、A2.png,类似这种形式的,然后通过for循环的计次变量拼接

dim intx,intyKeepCaptureFor i = 1 To 5    FindPic 0, 0, 0, 0, "Attachment:"&i&".png","000000", 0, 1, intX, intY    If intX > -1 And intY > -1 Then     TracePrint intx,inty    Exit For    End IfNextReleaseCapture

在代码中我有一个细节,我居然把相似度改成1,默认是90%,这是什么概念,就是说我要找的图必须是百分百一样,很少有找图命令敢这么写的还能找到图,实际上我也仅仅是敢在画面没重新加载的情况这么用,正常使用找图命令相似度还是要填0.8左右,以保证找图的成功率。

两种方法我个人推荐第二种方法,第一种方法虽然代码更简单,但是当图片超过几十张的时候,脚本就会莫名的崩溃。

这里说个题外话,找图命令的图片也可以放到本地,不一定非得放到附件里面,对于脚本测试来说这个很方便,但是对于脚本打包使用就不太方便了,与其图片放附件后在释放到本地,不如直接在脚本附件中使用。

往期同类型文章:

=正文完=

公众号文章并不是及时分发给粉丝,所以弄个微信群,我更新文章后第一时间转发的群里,大家可以扫下方二维码加群。

如果有其他问题可以加我的微信(xiaomu86119),或扫下方二维码

———————————-

推荐:

限时特惠:本站每日持续更新5-20节内部创业项目课程,一年会员
只需199元,全站资源免费下载点击查看详情
站长微信:
jjs406

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注