按键精灵找图找到后跳出循环 按键精灵如何设置循环

大家好,我是公众号3分钟学堂的郭立员,今天给带来一期基础知识的文章,主要讲一下找图、多点找色、找字之间的联系与区别,这是一篇基础原理的教程,可能会有些枯燥 。
由于篇幅比较长,分两期更新 。本期主要讲找图的原理以及偏色的原理 。
图色原理 无论是找图、找色、比色、找字这些命令都可以统称为图色命令,所有图色命令都有共同的特点,就是它们针对于图像像素点的颜色值和位置进行处理的 。
图像像素点是什么

按键精灵找图找到后跳出循环 按键精灵如何设置循环

文章插图
我们把图像放大会发现,图像是由一个个颜色块组成的,由于这些颜色块非常小,在不放大的情况下,我们是看不出它们有明显分块界限的 。那这些带有颜色的小方块,就是图像的像素点 。
像素点通常是近似正方形的,这里我用的是近似,它是由显示器屏幕的硬件决定的 。
像素点是在一个二维平面上排列的,分为横向和纵向,大量的像素点排列在一起就组成一张图像了 。
找图命令的原理 还是以上面那张图为例,我们截取一个4*4的图片,开始找图 。
按键精灵找图找到后跳出循环 按键精灵如何设置循环

文章插图
这里我把4*4图片的每一个像素点都标注了序号,一共是16个序号 。
下面说一下找图的过程,我以从左上到右下顺序的找图为例 。
①从马里奥图片左上角的第一个像素开始,寻找序号1像素点的颜色值,如下图那样一个个像素进行比对 。
按键精灵找图找到后跳出循环 按键精灵如何设置循环

文章插图
②假设找到了和序号1一样颜色的像素点,记录一下这个点的位置 。
③开始对上一步中找到点的下一个像素点和序号2的颜色比对是否一样,如果一样的话,再用下一个像素点颜色比对序号3的颜色,依次类推一直比对到序号16的颜色 。比对颜色也是按照4*4的位置比对,就是序号1-4是第一行,序号5-8是第二行……
④上一步比对序号2-16颜色有两种可能性:
一是完全一样,如果完全一样说明我们找图成功了,找图命令返回步骤②记录的位置,也就是我们常用的intx,inty 。
二是比对到某个序号颜色值不一样,说明比对失败,继续从步骤②位置的下一个像素点开始,找寻序号1像素点的颜色,循环上面的操作,以此循环往复 。
⑤循环比对所要找图区域内的所有颜色,如果比对完所有颜色都没有比对成功,说明找图命令没有找到图,为了方便脚本判断,会把-1赋值给intx,inty 。
以上这些步骤就是找图的原理 。
那么想一下哪些因素会影响找图速度?
①获取像素点颜色值的快慢,这也是为什么用“截图到内存命令”会提高找图速度的原因 。
②计算数据的速度,也就是比对两个像素点颜色值是否一样的用时 。
③所要找的图片越靠前找到用时越少 。
④序号1像素点在整个找图区域内出现的次数,次数越多可能比对的时间就多,这里用“可能”是因为如果第一次或者前几次出现就找到图了,下面的就不需要继续比对了 。
⑤所找图的图片尺寸越小速度越快,比如文中的例子是4*4的图,只要比对16个颜色就可以,如果是50*50就要比对2500个点 。当然对于现在计算机来说,16和2500的计算用时的差距是微乎其微的,但是如果进行循环找图,比如循环1万次,16万和2500万,用时就会有明显的区别了 。
针对截图在说一下,是不是图片越小越少,不是的,如果只有1个像素点,那么会有大量的重复可能性,从而导致找图找到错误的位置,我们截图本着一个原则:在保证截图具有唯一标识性的前提下,图片越小越好 。
偏色和相似度 使用找图命令的时候,还有两个参数,它们在上面找图原理没有说到,就是偏色和相似度 。
它们是做什么用的呢?
偏色和相似度的作用是一样的,都是为了增加找图的容差率(容错率),就是把与要找图非常接近的颜色也看做是有效的颜色,从而实现当找图区域的颜色发生细微变化后,还能通过找图命令找到我们想要的位置坐标 。
下面开始介绍一下偏色:
(一)偏色
在找图代码中,这个参数默认是000000,也就是无偏色 。这六个数字代表什么呢?
它们分成3组,每一组分别代表一种颜色 。
按键精灵找图找到后跳出循环 按键精灵如何设置循环

文章插图
这里需要强调一下颜色顺序是蓝色、绿色、红色,如果你有关于颜色的基础,是不是想说颜色值的顺序不是红绿蓝吗,没错在多数颜色相关的软件或者程序中确实是红绿蓝RGB,但是按键不是,也不知道编写按键的作者是怎么想的,记住这个顺序就好 。
我们还是以上面马里奥找图为例:
序号1的像素点
按键精灵找图找到后跳出循环 按键精灵如何设置循环

文章插图
颜色值是:d6330a,按照上面颜色值分组:
蓝色数值:d6
绿色数值:33
红色数值:0a
这里面数值为啥有字母呢,因为颜色值是十六进制的,而不是我们日常的十进制 。
十进制:0123456789 每满10个数字进一位
十六进制:0123456789ABCDEF 每满16个数字进一位,这里面A就相当于10,B就相当于11,C就相当于12,D就相当于13,E就相当于14,F就相当于15 。
关于十六进制和十进制转换自行百度,这里不讲 。
我们以蓝绿红每个颜色的最小偏色值为例,来了解一下偏色 。
每个颜色偏色的最小值是01,那么偏色值就是010101,假设我们给找图命令加上这个010101的偏色会有什么影响呢?
原本我们找序号1的颜色值是d6330a,如果加上偏色010101,那么符合要求的颜色值,就由原来的1个变成27个 。
符合要求颜色值的计算公式是d6330a010101
按颜色拆分计算:
蓝色:d601得到范围是d5~d7
绿色:3301得到范围是32~34
红色:0a01得到范围是09~0b
这些颜色范围得到的27个颜色是什么?
d53209 d5320a d5320b
d53309 d5330a d5330b
d53409 d5340a d5340b
d63209 d6320a d6320b
d63309 d6330a d6330b
d63409 d6340a d6340b
d73209 d7320a d7320b
d73309 d7330a d7330b
d73409 d7340a d7340b
红色是未偏色的颜色,其他都是偏色后,其实偏色可以理解为颜色偏移 。
原本一个颜色值d6330a,只是偏色值增加了01,就变成了27个颜色,那么找图命令中,比对序号1的颜色值时,就不是比对1个颜色,而是27个颜色,这样符合要求的颜色就有27种可能性,这么一来,找图的容差率(允许差别)就高了 。
当我们增大偏色值,这个找图的颜色范围会继续扩大 。
扩大的颜色范围计算公式:
(2*蓝色偏色 1)*(2*绿色偏色 1)*(2*红色偏色 1)
我们刚刚每个颜色最小偏色01的计算结果就是:
(2*01 1)*(2*01 1)*(2*01 1)=3*3*3=27
这里有一些特殊情况,颜色值是有上下限的,最小值是00,最大值是ff,如果最小值00再减去任何值都还是00,如果最大值ff再加上任何值都还是ff 。
回答新手一个常问的问题,偏色值要填多少合适呢?
偏色值的大小并不是一个固定的数值,但它有一个判断趋势,要根据你的需求来定,比如说:
你希望找的颜色非常精准,那偏色值就要填小一点,甚至是六个0这种无偏色的情况 。
如果你希望找的颜色相近的就算符合要求的,那么偏色就稍微填大一点 。
当然这里注意不要太大,否则就会把相差很大的颜色也误认为是符合要求的颜色 。
在网上很多教程的作者告诉你,偏色直接填333333或者是222222,这个数字可以不,答案是可以 。偏色333333后,符合颜色的增加峰值到总颜色的6.51%,偏色222222后,符合要求的增加峰值到总颜色的2.13% 。
偏色你填333333可以,但是不要把它当成固定的偏色值,也不要认为偏色的6个数必须都是一样的,你填333234也可以,填302010也行,记得一定要看需求 。
再有一个问题,偏色值高点好还是低点好?
偏色低:容差率低,速度快 。
偏色高:容差率高,速度慢 。
两种各有优缺点 。
【按键精灵找图找到后跳出循环 按键精灵如何设置循环】【未完待续 。。。】

    推荐阅读