Skip to content

屏幕找色

在设备屏幕截图中查找指定的多个颜色点,支持相对坐标和绝对坐标两种模式,可设置相似度阈值和查找所有匹配位置。

💡 快捷取色

您可以在控制台的开发者工具中进行快捷取色,快速获取屏幕坐标和颜色值数组。

快捷取色工具

接口说明

接口类型

findColor

参数

参数名类型必填说明
deviceIdstring设备ID
colorsarray颜色数组,格式:[[x, y, "颜色"], ...][[x, y, "颜色|相似度"], ...]
rectarray搜索区域 [x1, y1, x2, y2],相对坐标模式时必填,绝对坐标模式时不需要
multipleboolean是否查找所有匹配位置,默认 false,绝对坐标模式时不需要
spacingnumber结果间最小距离(像素),默认 50,仅在 multiple=true 时有效

返回值

单个匹配(multiple = false 或绝对坐标模式):

javascript
{
    x: 100,  // 匹配点的X坐标
    y: 200   // 匹配点的Y坐标
}

多个匹配(multiple = true):

javascript
[
    { x: 100, y: 200 },
    { x: 150, y: 250 },
    { x: 200, y: 300 }
]

未找到匹配:

javascript
null

功能说明

坐标模式

findColor 支持两种坐标模式:

1. 绝对坐标模式

绝对坐标模式所有点的坐标都是屏幕绝对坐标:

  • 不需要 rectmultiple 参数
  • 如果所有颜色点都匹配,返回第一个点的坐标

示例:

javascript
// 绝对坐标:所有点都是屏幕绝对坐标
colors: [
    [245, 509, "00B4F9|1"],   // 绝对坐标 (245, 509)
    [284, 745, "A49696|0.95"], // 绝对坐标 (284, 745)
    [290, 911, "9B8C89"]      // 绝对坐标 (290, 911)
]

2. 相对坐标模式

当颜色数组的第一个点为 [0, 0] 时,使用相对坐标模式:

  • 第一个点 [0, 0] 作为基准点,在 rect 区域内搜索
  • 其他点的坐标相对于第一个点
  • 可提供 rect 参数,定义搜索区域
  • 支持 multiple 参数查找所有匹配

示例:

javascript
// 相对坐标:第一个点是 [0,0],其他点相对于第一个点
colors: [
    [0, 0, "00B4F9|1"],      // 基准点
    [39, 236, "A49696|0.95"], // 相对基准点偏移 (39, 236)
    [45, 402, "9B8C89"]      // 相对基准点偏移 (45, 402)
]

基本使用

示例1:绝对坐标模式

javascript
// 验证屏幕上的多个绝对坐标点是否匹配
const result = await apiInvoke('findColor', {
    deviceId: 'P72578581E07',
    colors: [
        [245, 509, "00B4F9|1"],   // 绝对坐标点1
        [284, 745, "A49696|0.95"], // 绝对坐标点2
        [290, 911, "9B8C89"]      // 绝对坐标点3
    ]
    // 不需要 rect 和 multiple 参数
});

if (result) {
    console.log(`所有颜色点都匹配,基准点在 (${result.x}, ${result.y})`);
} else {
    console.log('颜色点不匹配');
}

示例2:相对坐标模式 - 查找所有匹配

javascript
// 查找所有匹配的位置
const results = await apiInvoke('findColor', {
    deviceId: 'P72578581E07',
    colors: [
        [0, 0, "FFFFFF|0.9"],
        [10, 10, "000000|0.9"]
    ],
    rect: [0, 0, 800, 1200],
    multiple: true,
    spacing: 50  // 结果间最小距离
});

if (results && results.length > 0) {
    console.log(`找到 ${results.length} 个匹配点`);
    results.forEach((point, index) => {
        console.log(`匹配点 ${index + 1}: (${point.x}, ${point.y})`);
    });
}

商务合作:try.catch@foxmail.com