- 初中三年级
- 2220985
- 396
- 0
- 532 朵
- 2506 个
- 334 个
- 480
- 2013-10-27
|
1#
t
T
发表于 2015-04-15 17:00
|
|只看楼主
高大上的等比例多点找色 本文由按键学院提供技术支持
按键学院交流群(1群已满):376122403 零基础学按键精灵群(2群):372671254
小编最近接到一个新手童鞋关于找图的问题,写了找图的代码,但是总也找不到图。小编检查了代码上完全没问题,最后发现,原来是想要找的图和游戏中的图片大小比例不对!!小编心里是一万只羊驼奔腾而过……图片的比例都不一致当然是找不到的啦。
当小编乐呵呵的和工程师07大大说起这个事情的时候,07大大以45度角仰天抬头,沉思了一会说道:不同比例大小的图是不能直接通过找图找到的,但是……也并非没办法实现 | 原理分析按键精灵使用找图命令是判断图片的每个像素点的颜色是否一致来实现的,如果图片大小比例不一致的话,两张图之间的像素点的比例还有颜色可能就会不相同,所以使用找图的命令是无法通过小图找到大图的。 但是呢,想要实现通过小图来找大图也并非完全没办法的。 童鞋们可以仔细观察下一张图放大和缩小的画面,其实图片的放大和缩小都是按照一定的比例进行的,放大图片其实就是里面的像素按照一定的比例给放大了。 所以可以得出一个思路————只要把找小图的命令里的相关数值也按照一定比例去放大就可以找到大图了!!当然,这样的话就不能使用找图的命令了,因为找图命令并没有明确的数值可以去设置,所以就需要使用到 多点找色的命令来实现。 比例换算先介绍下多点找色的命令 命令名称 | FindMultiColor | 命令功能 | 范围区域内查找多点颜色 | 命令参数 | 参数1 整数型,屏幕左上角X坐标参数2 整数型,屏幕左上角Y坐标 参数3 整数型,屏幕右下角X坐标 参数4 整数型,屏幕右下角Y坐标 参数5 字符串型,第一点16进制颜色值 参数6 字符串型,符合偏移点颜色组(相对第一点位置偏移X坐标|相对第一点位置偏移Y坐标|16进制颜色) 参数7 整数型,相似度
| 返回值: | 字符串型,左上角第一点颜色位置坐标 | 范例: | XY = Plugin.Color.FindMultiColor(0, 0, 1024, 768, "FFFFFF", "2|0|FFFFFF,-6|1|FFFFFF”,1)
|
通过上面的代码可以发现,这个找色命令的关键部分是 "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、使用等比例换算来找色,对于放大后的图片是有一定要求的,放大后的图片不能和原图差太多,因为图片被放大过多的话,那图片中的像素点可能会出现失真模糊的情况,那找色也是无法找到的。
童鞋们在平时的使用中要多注意哦
谢谢大家阅读,记得给小编送支花花 ! 顺手点个赞
[tr=rgb(143, 188, 143)] | 按键精灵免费公开课 | 回实战班:回合制通用教学火热报名 | 【听课对象】:对按键精灵感兴趣的同学们都可以来~ 【上课地点】:零基础学按键精灵群(372671254) 【上课时间】:周天晚上19:30-21:00 【上课内容】:按键精灵脚本基础经验谈——图色命令
| 本期重点:回合制游戏--神武 学习时效:终生有效 上课时间:周2、周4、周6的 20:00--22:00 导师:工程师07 技术支持:果儿(院刊编辑) | 点我进入按键学院报名啦 招生细节进群咨询招生办主任:2群-372671254(优先加入) 1群-376122403 |
|