• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

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

返回列表 12345678» / 13
发新话题 回复该主题

[技术交流] 【院刊】-【201504期】图色绝招——让你轻松识别放大后的图片 [复制链接]

1#

高大上的等比例多点找色


本文按键学院提供技术支持






按键学院交流群(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” 这段。它是根据第一个坐标进行偏移指定的像素点。

根据上面的原理来看,我们就可以得出这样的算法

大图偏移值 = 小图偏移值 * 图片缩放比例

我们可以把他编写成一个函数,方便之后的转换:
  1. Function 比例换算(数组, 比例)
  2. Dim str
  3. arr = 数组
  4. arr1 = Split(arr(1), ",")//把多点偏移部分提取出来分割
  5. str = ""
  6. For i = 0 To UBound(arr1)
  7. arr2 = Split(arr1(i), "|") //把偏移值分割出来
  8. str = str & arr2(0) * 比例 & "|" & arr2(1) * 比例 & "|" & arr2(2) & "," //偏移值分别乘以比例,然后连接起来赋值给变量str
  9. Next
  10. arr(1) = Left(str,Len(str)-1)// 这行代码是为了把str变量中结尾多出来的逗号去掉
  11. 比例换算1 = arr //把最终换算好的数组传递给函数作为返回值
  12. End Function
  13. //下面是范例,第一个参数是数组,第二个是图片缩放的比例
  14. 多点 = 比例换算1(Array("BDBDBD", "0|-3|5A6373,0|-7|39394A,2|-5|BDBDBD"), 1)
复制代码



实际应用

 


看了上面的代码,有童鞋会有疑问,如果事先不知道图片缩放的比例该怎么办?

这个问题其实很好解决:

对于事先不知道缩放比例的图,我们可以用一个循环一直遍历不同的比例,找到对应的图片后就退出循环。

这里就先拿一个游戏的截图来举例:

这个是正常大小的图片,我们先从这个图片中进行多点找色,这里我们找的是”水“这个字
您所在的用户组无法下载或查看附件


这个是图片放大之后,我们就是好要利用下面的遍历的方法去在里面找到这个”水“

您所在的用户组无法下载或查看附件
  1. Do
  2. //先把多点找色的偏移值进行换算,把比例参数设置成变量,每次循环递增一点
  3. 多点 = 比例换算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)
  4. TracePrint 多点(0) &"*"& 多点(1)
  5. //把结果带入到多点找色的命令里。
  6. XY=Plugin.Color.FindMutiColor(0,0,1900,900,多点(0),多点(1),0.8)
  7. MyArray = Split(XY, "|")
  8. X = CInt(MyArray(0)) : Y = CInt(MyArray(1))
  9. If x >= 0 Then
  10. TracePrint z
  11. MoveTo x, y
  12. Exit Do
  13. End If
  14. //这里设定比例每次循环递增0.1 的量,具体的递增的量可以自行修改,建议在1以内
  15. z = z + 0.1
  16. Delay 500
  17. TracePrint z
  18. 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






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

    本主题由 超级版主 瑞祥幽冥狼 于 2023/6/15 14:57:24 执行 审核帖子 操作
    按键学院免费交流群:376122403

    按键学院招生计划
    按键学院系统教程
    2#

    ——让你轻松识别放大

    3#

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

    4#

    学习学习学习学习

    5#

    谢谢分享!!!。

    6#

    厉害了

    7#

    方法

    8#

    bnmbnmbnm

    9#

    学习学习

    10#

    谢谢分享!学习了,回复可见

    11#

    我爱学习,学习使我快乐

    12#

    新型干法士大夫安慰

    13#


    14#

    大图偏移值 = 小图偏移值 * 图片缩放比例

    15#

    41111111111111

    16#

    好像很高深..看看!

    17#

    学习学习

    18#

    好人一生平安 谢谢

    19#

    正需要呢~~~~~~~~~

    20#

    mark一下

    发新话题 回复该主题