Skip to main content

多点找色

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)
  • 参数
参数类型是否必填说明
colorsstr颜色特征点,通常用图色助手获取
rectlist搜索范围 [x, y, x1, y1]
spaceint结果间距,默认 5 像素。多个结果在此距离内重合则只保留一个
oriint找色方向 1-8,默认 2(左上→右下横向)详情见...
difffloat相似度 0-1,默认 0.98
imageBitmap/ndarray传入源图,None=自动截屏
modeint0=RGB, 1=Norm
untilint超时毫秒数,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_numint最大返回数量,默认 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)
  • 参数
参数类型是否必填说明
colorstr目标颜色 "#RRGGBB"
rectlist搜索范围
difffloat相似度 0-1,默认 0.98
modeint0=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)