多点找色
from ascript.android.screen import FindColors
从屏幕中找到 符合颜色特征点 的 点位
使用场景
- 通过多个颜色特征点定位 UI 元素(比找图更快,不需要截模板图)
- 游戏中检测血量条、进度条的颜色变化
- 查找屏幕上特定颜色的像素点位置(如红色提醒、绿色在线状态)
- 配合图色工具一键生成颜色特征串,复制即可使用
方法
find — 找一个点
找到第一个符合特征点的位置,立刻返回。
- 函数
FindColors.find(colors, rect=None, space=5, ori=2, diff=0.98, image=None, mode=0, until=0)
- 参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| colors | str | 是 | 颜色特征点,通常用图色助手获取 |
| rect | list | 否 | 搜索范围 [x, y, x1, y1] |
| space | int | 否 | 结果间距,默认 5 像素。多个结果在此距离内重合则只保留一个 |
| ori | int | 否 | 找色方向 1-8,默认 2(左上→右下横向)详情见... |
| diff | float | 否 | 相似度 0-1,默认 0.98 |
| image | Bitmap/ndarray | 否 | 传入源图,None=自动截屏 |
| mode | int | 否 | 0=RGB, 1=Norm |
| until | int | 否 | 超时毫秒数,0=不重试,>0=持续重试直到超时 |
- 返回值
Point 点位对象,可通过 .x .y 获取坐标,未找到返回 None
- 示例
from ascript.android.screen import FindColors
point = FindColors.find('634,2126,#05D395|675,2142,#05D395|889,2146,#05D395', rect=[82, 2010, 1005, 2215])
if point:
print(point.x, point.y)
find_all — 找所有点
找到全部符合特征点的位置。
- 函数
FindColors.find_all(colors, rect=None, space=5, ori=2, diff=0.98, image=None, p_max_num=999999, mode=0, until=0)
- 参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| p_max_num | int | 否 | 最大返回数量,默认 999999 |
| 其他参数 | - | - | 同 find() |
- 返回值
Point 数组,或 None
- 示例
from ascript.android.screen import FindColors
points = FindColors.find_all('634,2126,#05D395|675,2142,#05D395', rect=[82, 2010, 1005, 2215])
if points:
for p in points:
print(p.x, p.y)
find_color — 单点找色
在屏幕上查找第一个匹配指定颜色的像素点。
- 函数
FindColors.find_color(color, rect=None, diff=0.98, mode=0)
- 参数
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| color | str | 是 | 目标颜色 "#RRGGBB" |
| rect | list | 否 | 搜索范围 |
| diff | float | 否 | 相似度 0-1,默认 0.98 |
| mode | int | 否 | 0=RGB, 1=Norm |
- 返回值
dict {"x": 100, "y": 200} 或 None
- 示例
from ascript.android.screen import FindColors
# 找到屏幕上第一个红色像素
pos = FindColors.find_color("#FF0000", rect=[0, 0, 500, 500])
if pos:
print("找到红色:", pos["x"], pos["y"])
find_all_color — 单点找色(全部)
查找所有匹配颜色的像素点。
- 函数
FindColors.find_all_color(color, rect=None, diff=0.98, mode=0, max_num=999999)
- 返回值
list[dict],每个元素为 {"x": ..., "y": ...},或 None
关于找色方向
找色方向是指:找到颜色特征点的先后顺序
如图:
- 1: 左上角到右下角,纵向开始找色,先找到 a 顶点。
- 2: 左上角到右下角,横向开始找色,先找到 b 顶点。
- 3: 右上角到左下角,横向开始找色,先找到 c 顶点。
- 依此类推
image 参数说明
find() 和 find_all() 支持 image 参数,传入 Bitmap 或 cv2 ndarray 避免重复截屏:
from ascript.android.screen import FindColors, capture
bmp = capture()
p1 = FindColors.find('...', image=bmp)
p2 = FindColors.find('...', image=bmp)