-
关注Ta
-
- 注册时间 2014-10-29
- 最后登录 2016-05-06
-
- 发帖84
- 在线41小时
- 精华0
- DB768
- 威望0
- 保证金0
- 桃子0
- 鲜花0
- 鸡蛋0
-
访问TA的空间加好友用道具
|
高大上的等比例多点找色 引用 小编最近接到一个新手童鞋关于找图的问题,写了找图的代码,但是总也找不到图。小编检查了代码上完全没问题,最后发现,原来是想要找的图和游戏中的图片大小比例不对!!小编心里是一万只羊驼奔腾而过……图片的比例都不一致当然是找不到的啦。
当小编乐呵呵的和工程师07大大说起这个事情的时候,07大大以45度角仰天抬头,沉思了一会说道:不同比例大小的图是不能直接通过找图找到的,但是……也并非没办法实现 {:4_115:} 原理分析按键精灵使用找图命令是判断图片的每个像素点的颜色是否一致来实现的,如果图片大小比例不一致的话,两张图之间的像素点的比例还有颜色可能就会不相同,所以使用找图的命令是无法通过小图找到大图的。 {:4_99:} 但是呢,想要实现通过小图来找大图也并非完全没办法的。 童鞋们可以仔细观察下一张图放大和缩小的画面,其实图片的放大和缩小都是按照一定的比例进行的,放大图片其实就是里面的像素按照一定的比例给放大了。 所以可以得出一个思路————只要把找小图的命令里的相关数值也按照一定比例去放大就可以找到大图了!!当然,这样的话就不能使用找图的命令了,因为找图命令并没有明确的数值可以去设置,所以就需要使用到 多点找色的命令来实现。 比例换算先介绍下多点找色的命令 通过上面的代码可以发现,这个找色命令的关键部分是 "FFFFFF", "2|0|FFFFFF,-6|1|FFFFFF” 这段。它是根据第一个坐标进行偏移指定的像素点。 根据上面的原理来看,我们就可以得出这样的算法 大图偏移值 = 小图偏移值 * 图片缩放比例我们可以把他编写成一个函数,方便之后的转换: - Function 比例换算(数组, 比例)
- Dim str
- arr = 数组
- arr1 = Split(arr(1), ",")//把多点偏移部分提取出来分割
- str = ""
- For i = 0 To UBound(arr1)
- arr2 = Split(arr1(i), "|") //把偏移值分割出来
- str = str & arr2(0) * 比例 & "|" & arr2(1) * 比例 & "|" & arr2(2) & "," //偏移值分别乘以比例,然后连接起来赋值给变量str
- Next
- arr(1) = Left(str,Len(str)-1)// 这行代码是为了把str变量中结尾多出来的逗号去掉
- 比例换算1 = arr //把最终换算好的数组传递给函数作为返回值
- End Function
- //下面是范例,第一个参数是数组,第二个是图片缩放的比例
- 多点 = 比例换算1(Array("BDBDBD", "0|-3|5A6373,0|-7|39394A,2|-5|BDBDBD"), 1)
实际应用看了上面的代码,有童鞋会有疑问,如果事先不知道图片缩放的比例该怎么办? 这个问题其实很好解决: 对于事先不知道缩放比例的图,我们可以用一个循环一直遍历不同的比例,找到对应的图片后就退出循环。 这里就先拿一个游戏的截图来举例: 这个是正常大小的图片,我们先从这个图片中进行多点找色,这里我们找的是”水“这个字 这个是图片放大之后,我们就是好要利用下面的遍历的方法去在里面找到这个”水“ - Do
- //先把多点找色的偏移值进行换算,把比例参数设置成变量,每次循环递增一点
- 多点 = 比例换算1(Array("80F0F8","0|2|70E8F8,0|5|50D8F8,0|8|30C8F8,0|11|18B8F8,-2|11|18B8F8,-5|10|20BCF8,-4|9|28C0F8,-3|8|30C8F8,-2|8|606020,3|8|30C8F8,4|9|28C0F8,5|10|20BCF8,5|11|606020"), z)
- TracePrint 多点(0) &"*"& 多点(1)
- //把结果带入到多点找色的命令里。
- XY=Plugin.Color.FindMutiColor(0,0,1900,900,多点(0),多点(1),0.8)
- MyArray = Split(XY, "|")
- X = CInt(MyArray(0)) : Y = CInt(MyArray(1))
- If x >= 0 Then
- TracePrint z
- MoveTo x, y
- Exit Do
- End If
- //这里设定比例每次循环递增0.1 的量,具体的递增的量可以自行修改,建议在1以内
- z = z + 0.1
- Delay 500
- TracePrint z
- Loop
注意要点:1、这里编写出的函数是只针对等比例缩放的图片,即是长和宽的缩放比例是一致的。如果长和宽缩放的比例不一致的话是无法直接使用上面的换算函数。 2、使用等比例换算来找色,对于放大后的图片是有一定要求的,放大后的图片不能和原图差太多,因为图片被放大过多的话,那图片中的像素点可能会出现失真模糊的情况,那找色也是无法找到的。 童鞋们在平时的使用中要多注意哦 {:5_138:}
|