按键--找色找图基础

尊重原创:按键--找色找图基础


为什么写找色找图?


话说某天,笔者在按键精灵论坛上闲逛,突发奇想,敲入关键字“找色”结果搜索到了400多个帖子,敲入关键字“找图”结果搜索到了500多个帖子,大部分帖子的标题如下: 
u问一个区域找图问题
u为什么我找图的时候鼠标老跑到左上角?
u求后台找图的脚本!
u按键精灵的后台找图找色对网络游戏不能用?
u很奇怪的一个找图问题
u……

看了这些帖子,能够真切地感受到网友嗷嗷待哺的心情扑面而来,这也是实战篇第一个专题选择“找色找图”的一个重要原因,当然还有另外两个原因:其一,找色找图是几乎所有实用脚本必须使用到基础技术。如果说按键精灵语言和VBS语言是按键精灵的内功和内力的话,那么按键精灵中的鼠标键盘命令和找色找图功能绝对可以称的上是外家功夫中的拳法和腿法,而拳法和腿法在各个门派中都是最最基础的功夫。且看找色找图广泛的应用场景: 
u 自动识别箭头实现自动跳舞;
u 自动识别血条加红加蓝;
u 自动挂机找怪打怪;
u 自动识别码验证;
u 自动识别NPC做任务;
u QQ 休闲游戏例如连连看对对碰辅助;
u …… 

其二:找色找图功能相对较难掌握。从网络及按键精灵论坛上的帖子来看,虽然已经有了一部分找色找图教程和热心网友的详细解释,但是远不够深入和系统,有些人甚至对颜色、像素、坐标系等基础知识和概念都搞不清楚,依葫芦画瓢写出脚本来,脚本运行不正确或者没有达到预先现象时很茫然,不知道从何处入手解决问题。

因此,本篇尝试从找色找图的原理入手,由浅入深地介绍找色找图的基础知识和概念,给出找色找图的关键技术,最终希望能够达到自己分析找色找图出错的原因,以及优化找色找图性能的目的。


基础知识与概念 

找色找图涉及到的基础知识和概念包括:像素、颜色、坐标系等,这些知识相对枯燥,已经了解的看官可以跳过此节的内容,当然如果看官您想温习一下基础知识,再顺便帮笔者挑挑错误,愈加欢迎。

我们知道,计算机处理任何事物都必须首先把现实世界的信息转换成它所能理解的信息,这个过程就是所谓的数字化。在现实世界中,我们看到的事物都是连续的图像,但在计算机中,我们若把一副图片放大数倍,会发现这些看似连续的图片其实是由许多小方点所组成,每个小方点涂抹了一种颜色,这些小方点就是构成图片的最小单位:像素。平常所说的分辨率就是指的是一块屏幕/一副图片上显示的像素点数目,比如分辨率为1024*768,其像素数目为1024×768=786,432个。

话说若干年前,牛顿老先生做过一个有趣的实验,最后得出结论:世界上任意颜色都可以由红、绿、蓝这三种颜色不同比例混合后产生,这是RGB模型最初的由来。如图1所示。

在按键精灵中,用的最多的是24色的图片。按照RGB模型,24色的图片其每个像素点的颜色都由24位比特组成,每个颜色分量8位,也就是说,每个颜色分量的取值范围为0到255。24色图片也可以用6个十六进位数字来表示颜色,例如#FF0000代表255份红色、0份绿色和0份蓝色混合。这两种表示方式也可以互相转换,例如#FF0000就可以用(255,0,0)来表示,意思都是等价的。

1.JPG 
最后,再介绍一下坐标系的概念,这里的坐标系指的是Windows操作系统中的屏幕坐标系和窗口客户区坐标系(简称窗口坐标系)。游戏中的游戏自定义坐标系与各个游戏本身设定相关,不同的游戏(3D、2D)、不同的视角(45度、60度、90度)等都会有不同的游戏坐标系,我们将在后续章节详细介绍游戏中的不同坐标系。

屏幕坐标系是一个直角左手系,x轴方向向右为正,y轴方向向下为正,原点(0,0)在屏幕的左上角,以分辨率为1024*768为例,最右上角的点坐标为(1023,0),最左下角的点坐标为(0,767),最右下角的点坐标为(1023,767),如图2所示。

2.JPG

窗口坐标系和屏幕坐标系最明显的区别在于坐标原点,屏幕坐标系的坐标原点在整个屏幕的左上角,而窗口坐标系的坐标原点在窗口客户区的左上角,通常这两个点是不重合的。假设窗口坐标系原点坐标在屏幕坐标系中的坐标为(x,y),那么窗口坐标系中的任意一个a点(xa,ya),其在屏幕坐标系中的坐标为(xa+x,ya+y)。
3.JPG

找色找图原理及优化

所有的找色找图语句基于同样一个基本原理,那就是:找色找图以像素点的颜色比较为基础。这个基本原理,是后面所有讨论的出发点,理解这个原理,就能尽量避免找图失败现象的发生。

找色找图是一门很有学问的技术,具有很强的实践操作性,在如下几处地方有优化的空间:
u源图的选择
u图片的透明处理
u设定相似度
u透明找图 Vs 多点找色

(1)源图的选择
在源图的选择上,一定要选择游戏中需要查找的人、物、景、文字与其它独一无二的地方,可以是它的名称,也可以是它的图片。但是一定要保证源图在目标图中的独一无二性,这样才不会出现误判,例如有人以血条来判断怪物,但是宝宝也有血条,结果经常点到自己的宝宝上面;也一定要保证源图不会改变,这样才不会出现漏判,这在3D游戏中尤为明显,很多怪物换个角度样子就不一样了。在源图的选择上,有以下几个常见问题:

为什么使用JPG格式的图片找不到图?
从具体的图片格式看,BMP图片严格按照RGB模型,依次存储图片中所有像素点的颜色信息,没有进行任何压缩,而JPG图片和GIF图片都对原始图片进行了压缩和转换,许多像素点的颜色信息丢失或者改变,从人眼的角度看,一般难以明显分辨一副BMP图片和JPG图片的差别,但是,计算机能够完全比较出像素点的颜色不同,这也是在找图的时候,很多人使用JPG图片找不到图的重要原因。图4是一个具体的例子,笔者截取了“浪漫庄园”中矿石的图片,分别存成了BMP图片和JPG图片,放大后可以看到,两者的像素点的颜色信息是不同的。
4.JPG 

为什么图片大小和源图不同找不到图?
位图是点阵图,在进行缩放的时候像素点的颜色信息可能也会改变。如下情况都可能会造成游戏窗口中的图像信息与原有图像不同,造成找不到图:
u游戏窗口在全屏与窗口方式之间进行切换;
u设定不同的屏幕分辨率;
u在游戏的过程中,缩放游戏窗口;
u对截下来需要查找的图片进行了大小、形状变换等

源图和目标图的色深不一样为什么找不到图?
颜色在高级色深与低级色深的相互转换过程中会有改变,例如24色到16色的转换过程中,会丢失一些颜色信息,有一些像素点的颜色由于无法使用16色表示,只能用16色中最接近的颜色来进行表示和填充。因此在找色找图时,屏幕的色深与所需查找的颜色或者图片的色深必须一致,以免出现找不到图的情况。

(2)图片的透明处理
找图很费时,为了提高找图的效率和准确度,按键精灵给出了透明色/背景色的独特处理方法:如果源图的外面一圈/四角为同样一种颜色,按键精灵就把这种颜色默认为透明色,透明色可以是任何一种颜色,包括白色。在找图时,只要遇到了透明色,那么直接认为颜色相等,也就是凡是遇到源图中为透明色的点,就总是认为比较成功。当然,按键精灵还提供了FindPicEx函数由用户指定透明色,然后再进行找图。这样既能提高找图的速度,也能提高找图的准确度。涂色的具体方法详见相应的帖子。

(3)相似度的设定
找图时相似度的设定也十分关键,设定的相似度太低的话,容易找到别的图片,造成误判,相似度设定的太高的话,容易造成搜索不到所需要的图片,造成漏检。相似度的设定需要在具体的游戏,具体的图片,反复尝试,才能确定最佳的相似度。

(4)透明找图 Vs 多点找色
多点找色可以看作是一种比较特殊的找图方法,把源图中比较关键的多个点之外的所有点都涂成透明色,效果就相当于多点找色。如果所需查找的源图较为单一(例如数字,字母),使用多点找色可以取得比透明找图更好的效果。找形状是一种特殊的多点找色,即多点找色中所有点的颜色都相同。找形状比较适合颜色单一(例如黑白图片)的场景,例如验证码识别等。

在选择透明找图还是多点找色的问题上,要把握一个原则,即:查找的源图是否复杂。如果源图比较简单,那么优先选择使用多点找色,如果源图实在太复杂,难以给出所有查找点的坐标及其颜色,那么就使用透明找图。如果源图是一个很特殊的图,甚至可以只选择几个最关键的像素点作为多点找色的输入,在此情况下,可以减少多点找色中点的数目,在保证准确度的同时,提高多点找色的效率。


后记

本篇主要介绍基础知识,在后续文章中,将会给出找色找图的若干实战介绍,敬请期待。

另外,按键精灵论坛还有几篇相关文章推荐阅读:
u个人对找图功能原理的理解
u对新手看:如何处理图形查找所需的图片
u按键精灵找图秘籍【原创】

<think>好的,用户现在问的是关于按键精灵在小程序游戏中实现多点的方法。之前他提过一个问题,就是首次成功,但刷新后失效,我之前已经给过解决方案。现在他的新问题是需要介绍多点的相关内容,可能需要更基础或更详细的步骤。 首先,我需要确定用户的背景。他可能是一个刚开始使用按键精灵和大漠插件进行游戏自动化的人,特别是针对小程序游戏。小程序游戏可能基于微信或其他平台,使用Canvas或WebGL渲染,这对可能有挑战,因为动态元素较多,颜容易变化。 用户之前遇到刷新后失败的问题,说明他对多点的基本使用已经有了一定了解,但在实际应用中遇到了问题。现在他可能想更系统地了解如何正确使用多点功能,避免之前的错误,或者优化现有的脚本。 接下来,我需要解释多点的基本原理,以及如何在大漠插件中使用。要强调多点相对于单点的优势,比如抗干扰能力更强,适用于动态UI或颜变化的场景。然后分步骤介绍实现方法,包括使用大漠综合工具抓取颜数据,编写脚本时的注意事项,比如容差设置、坐标处理等。 另外,需要提到可能遇到的问题,比如颜变化、窗口位置偏移、绑定模式错误等,这些是用户之前遇到的,所以在介绍时需要给出对应的解决方案,比如动态获取基准点、窗口绑定和相对坐标转换,以及调整容差参数。 可能用户没有说出来的需求是希望有一个稳定可靠的脚本,即使在游戏更新或界面变化后也能适应。所以需要强调动态获取颜和坐标的重要性,以及如何结合其他方法,如像识别或内存操作,作为备用方案。 最后,总结关键点,确保用户能够按步骤操作,并知道如何调试和优化脚本。可能需要提醒使用日志记录和工具验证,这些在之前的回答中也提到过,现在可以再次强调以加强记忆。</think>--- 以下是针对按键精灵结合大漠插件在小程序游戏中实现**多点**的详细介绍,包括原理、步骤和常见问题解决方案: --- ### **一、多点功能概述** **1. 什么是多点?** - 多点像识别的一种简化形式,通过判断**一个主颜点**和多个**相对坐标偏移点的颜组合**,来定位目标区域。 - **优势**:比单点更稳定,能避免因局部颜变化导致的误判。 **2. 适用场景** - 小程序游戏中的按钮、状态标识、动态特效等固定UI元素检测。 - 需要对抗颜微变(如光影效果、半透明元素)的场合。 --- ### **二、实现步骤(按键精灵 + 大漠插件)** #### **1. 准备工作** - **安装工具**: - 按键精灵(支持VBS语法) - 大漠插件(注册`dm.dll`并绑定到按键精灵) - 大漠综合工具(用于抓取颜数据) - **绑定小程序窗口**: 使用`dm.BindWindow`绑定游戏窗口句柄,确保截稳定(如绑定模式选`dx.graphic.3d`)。 #### **2. 采集颜数据** 1. **打开大漠综合工具**: - 连接目标窗口,进入“颜抓取”功能。 - 在游戏界面中选取一个**主颜点**(如按钮中心),记录其坐标和颜值(例如`(100,200)-FFFFFF`)。 - 围绕主点选取多个**相对偏移点**(如按钮边缘、文字等),记录它们的相对坐标和颜(例如`1,2|303030`表示主点右1像素、下2像素处的颜为`303030`)。 **示例数据格式**: ```plaintext 主点颜: 100,200,FFFFFF 偏移点: 1,2,303030; -3,5,808080 ``` 2. **生成多点代码**: 大漠综合工具可直接生成代码片段,或手动拼接参数。 #### **3. 编写脚本代码** ```vbs // 绑定大漠插件 Dim dm Set dm = CreateObject("dm.dmsoft") // 绑定小程序窗口(需提前获取窗口句柄hwnd) dm_ret = dm.BindWindow(hwnd, "dx.graphic.3d", "windows", "windows", 0) // 设置参数 main_color = "FFFFFF" // 主点颜 offset_colors = "1,2,303030;-3,5,808080" // 相对坐标和颜 sim = 0.9 // 相似度(0-1) dir = 0 // 查方向(0:从左到右,从上到下) // 执行多点 dm.FindMultiColor 0, 0, 2000, 2000, main_color, offset_colors, sim, dir, intX, intY // 判断结果 If intX >= 0 And intY >= 0 Then TracePrint "到目标,坐标:" & intX & "," & intY Else TracePrint "未到目标" End If // 解绑窗口 dm.UnBindWindow ``` --- ### **三、关键参数详解** 1. **主颜点 (`main_color`)** - 格式:`"RRGGBB"`(如白为`"FFFFFF"`) - 作用:确定搜索的起始参考点,通常选择颜稳定、不易变化的区域。 2. **偏移颜点 (`offset_colors`)** - 格式:`"x1,y1,颜1;x2,y2,颜2"`(相对主点的偏移坐标) - 示例:`"5,10,FF0000;-3,8,00FF00"` - 作用:通过多个点的颜组合确认目标唯一性。 3. **相似度 (`sim`)** - 范围:`0~1`(1表示完全匹配) - 建议:小程序游戏因渲染差异,通常设为`0.8~0.95`。 4. **偏 (`offset_color`)** - 若颜因光影变化浮动,可使用偏格式:`"RRGGBB-RRGGBB"`(如`"FFFFFF-303030"`表示允许R/G/B通道各有±0x30的偏差)。 --- ### **四、常见问题与优化** #### **1. 失败原因** - **颜/坐标变化**:游戏刷新后UI位置或颜改变。 **解决**:重新采集数据,或改用动态基准点(如先主菜单再相对偏移)。 - **窗口未绑定**:截数据来源不稳定。 **解决**:检查`BindWindow`模式,尝试`dx.graphic.2d`或`gdi`模式。 - **未等待加载完成**:截时界面未就绪。 **解决**:增加延迟或循环检测加载完成标志。 #### **2. 性能优化** - **缩小搜索范围**:通过其他方式(如单点颜)先定位大致区域,减少`FindMultiColor`的搜索范围(如从全屏`2000,2000`缩小到`500,500`)。 - **降低搜索频率**:避免高频调用函数,适当加入`Delay`。 #### **3. 高级技巧** - **动态颜适配**: 使用`GetColor`实时获取基准点颜,再计算偏移点(应对主颜变化)。 ```vbs base_color = dm.GetColor(100, 200) // 动态获取基准点颜 dm.FindMultiColor 0, 0, 2000, 2000, base_color, offset_colors, sim, dir, intX, intY ``` - **容错机制**: 若目标可能被遮挡,设置多次尝试并统计结果。 --- ### **五、适用案例** #### **案例:检测小程序游戏“开始按钮”** 1. **采集数据**: - 主点:按钮中心`(300,500)-FFA500`(橙- 偏移点:右侧文字`10,0,FFFFFF`(白)、下方阴影`0,5,808080`(灰- 参数:`sim=0.9`, `dir=0` 2. **代码**: ```vbs dm.FindMultiColor 0, 0, 600, 800, "FFA500", "10,0,FFFFFF;0,5,808080", 0.9, 0, x, y ``` --- ### **六、总结** 通过大漠插件的`FindMultiColor`函数,结合动态基准点和容差参数,可以在小程序游戏中稳定实现多点。核心要点: 1. 精准采集颜数据 2. 合理设置相似度与偏 3. 绑定窗口确保截稳定 4. 增加异常处理与日志调试 若仍遇复杂问题(如Canvas渲染干扰),可尝试结合**像识别(OCR/YOLO)**或**内存扫描**作为补充方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值