精准定位需用稳定找色逻辑:先用取色器获取目标颜色值如0x3a7dce,再用getColorRGB验证坐标颜色,最后封装模糊比色函数应对亮度/色温变化。

在手机自动化脚本中精准定位按钮、图标或状态标识,必须依赖稳定可靠的找色逻辑,而不是靠猜坐标或硬编码位置。
单点找色:先确认颜色值再锁定位置
第一步:用触动精灵 IDE 内置取色器(连接设备后点击工具栏「取色」按钮)对准目标像素点,记录下十六进制颜色值,例如 【0x3a7dce】。注意不要取半透明边缘或动态渐变区域,否则换背景就失效。
第二步:调用 getColorRGB(x, y) 验证该点实时颜色是否匹配。比如:r,g,b = getColorRGB(520, 310) → hex = string.format("%02X%02X%02X", r, g, b) → 判断 hex == "3A7DCE"。
第三步:封装模糊比色函数,避免因屏幕亮度/色温变化导致失败。例如:function isColor(x,y,c,s) local r,g,b = c>>16&0xFF, c>>8&0xFF, c&0xFF local rr,gg,bb = getColorRGB(x,y) return math.abs(r-rr)<s and math.abs end>。其中 <strong>【s 值建议设为 20~40,太大易误判,太小容错差】</strong>。</s>
多点找色:用相对坐标锚定动态界面元素
当你面对位置不固定但结构稳定的 UI 元素(如浮动技能按钮、移动的背包格子),必须用多点找色。核心是选一个不变的基准点,再记录它周围 2~4 个参照点的相对偏移和颜色。
方法一:手动构造 posandcolors 字符串
以基准点颜色 0x181F85 为例,若其右侧 29px、下方 1px 处是 0x00BBFE,右下 103px、上 4px 处是 0x0B6BBE,则参数写成:"29|1|0x00BBFE,103|-4|0x0B6BBE"。注意分隔符用英文逗号,坐标间用竖线,【负数坐标必须带符号,不能省略】。
方法二:用 findMultiColorInRegionFuzzyExt 实现高容错
支持模糊度 + 偏色校正。例如:point = findMultiColorInRegionFuzzyExt(0x181F85, "29|1|0x00BBFE,103|-4|0x0B6BBE", 85, 0, 0, 1080, 2340, {main=0x0a0a0a, list=0x151515})。这里 main 是基准点允许的 RGB 偏差,list 是参照点偏差,能应对整体色调偏移。
区域限定找色:避开干扰色块提升成功率
① 先截图保存当前界面:snapshot("tmp.png", 0, 0, 1080, 2340)。
② 加载图片对象:local img, msg = image.loadFile(userPath().."/res/tmp.png")。
③ 调用 image.findColor(img, {array={{0x3a7dce}}, find_all=true}, 90, 200, 400, 800, 700) —— 这里限定在屏幕中间偏上区域(200,400)→(800,700)内搜索,【x2 必须大于 x1,y2 必须大于 y1,否则返回空】。
④ 检查返回值:if type(point)=="table" and #point>0 then dialog("找到 "..#point.." 个点") end。
二值化找色:专治文字、图标边缘模糊场景
适用于 OCR 文字识别前预处理,或找纯黑白图标。先用图像处理工具将原图转为严格黑白(阈值设为 128),再用 ts.imgFindColor 函数:point = ts.imgFindColor(userPath().."/res/icon_bw.png", 255, "0|0|255,5|5|255", 0, 0, 100, 100)。其中 color=255 表示找白色点,posandcolors 中的数值也必须是 0(黑)或 255(白),【传入非 0/255 的值会导致函数直接返回空表】。


















