查找指定区域内的所有颜色块 - FindColorBlockList
函数简介
查找指定区域内符合指定颜色范围的所有颜色块坐标点。此函数可以在指定区域内搜索所有符合特定颜色范围的颜色块,并返回它们的左上角坐标列表。适用于需要批量查找颜色区域的场景,如UI元素批量定位、图像特征批量识别等。
ColorModel:
颜色每个通道单独计算范围,如颜色范围位3278FA,6496FF,实际对应R(50~100) G(120 ~150) B(250 ~255)
包含下限(>= color1) 包含上限(<= color2)
支持ARGB模式如#FFFFFFFF
支持反色模式,交集并集查询颜色
- 0: 正常匹配,保留在颜色范围内的像素
- 1: 反色匹配,保留在颜色范围外的像素
- 2: 正常交集匹配,保留在颜色范围内的像素取交集
- 3: 反色交集匹配,保留在颜色范围外的像素取交集
如{"StartColor": "3278FA", "EndColor": "6496FF","Type":0}
x1 , y1, x2, y2传 0, 0, 0, 0 为窗口整个客户区
返回数据为相对窗口坐标
接口名称
FindColorBlockList
DLL调用
long FindColorBlockList(long ola, int x1, int y1, int x2, int y2, string colorList, int count, int width, int height, int type)
参数定义:
ola
(长整型数): OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。x1
(整型数): 查找区域的左上角X坐标y1
(整型数): 查找区域的左上角Y坐标x2
(整型数): 查找区域的右下角X坐标y2
(整型数): 查找区域的右下角Y坐标colorList
(字符串): 颜色列表的json字符串,如: [{"StartColor": "3278FA", "EndColor": "6496FF","Type":0}, {"StartColor": "3278FA", "EndColor": "6496FF","Type":1}]count
(整型数): 在宽度为width,高度为height的颜色块中,符合color颜色的最小数量width
(整型数): 色块宽度height
(整型数): 色块高度type
(整型数): 是否去重- 0: 不去重
- 1: 去重
示例:
// 在窗口客户区查找所有颜色块
string colorList = "[{\"StartColor\": \"3278FA\", \"EndColor\": \"6496FF\", \"Type\": 0}]";
long result = FindColorBlockList(ola, 0, 0, 0, 0, colorList, 10, 20, 20, 0);
if (result != 0) {
// 解析返回的JSON字符串
// 注意:使用完后需要调用FreeStringPtr释放内存
printf("找到颜色块列表:%s\n", result);
FreeStringPtr(ola, result);
} else {
printf("未找到颜色块\n");
}
// 在指定区域查找所有白色块(去重)
string colorList = "[{\"StartColor\": \"FFFFFF\", \"EndColor\": \"FFFFFF\", \"Type\": 0}]";
long result = FindColorBlockList(ola, 100, 100, 200, 200, colorList, 5, 10, 10, 1);
if (result != 0) {
printf("找到白色块列表:%s\n", result);
FreeStringPtr(ola, result);
} else {
printf("未找到白色块\n");
}
COM调用
string FindColorBlockList(int x1, int y1, int x2, int y2, string colorList, int count, int width, int height, int type)
参数定义:
x1
(整型数): 查找区域的左上角X坐标y1
(整型数): 查找区域的左上角Y坐标x2
(整型数): 查找区域的右下角X坐标y2
(整型数): 查找区域的右下角Y坐标colorList
(字符串): 颜色列表的json字符串,如: [{"StartColor": "3278FA", "EndColor": "6496FF","Type":0}, {"StartColor": "3278FA", "EndColor": "6496FF","Type":1}]count
(整型数): 在宽度为width,高度为height的颜色块中,符合color颜色的最小数量width
(整型数): 色块宽度height
(整型数): 色块高度type
(整型数): 是否去重- 0: 不去重
- 1: 去重
示例:
# 在窗口客户区查找所有颜色块
colorList = '[{"StartColor": "3278FA", "EndColor": "6496FF", "Type": 0}]'
result = ola.FindColorBlockList(0, 0, 0, 0, colorList, 10, 20, 20, 0)
if result:
# 解析返回的JSON字符串
blocks = json.loads(result)
for block in blocks:
messagebox("找到颜色块,左上角坐标:(" + str(block["x"]) + ", " + str(block["y"]) + ")")
else:
messagebox("未找到颜色块")
# 在指定区域查找所有白色块(去重)
colorList = '[{"StartColor": "FFFFFF", "EndColor": "FFFFFF", "Type": 0}]'
result = ola.FindColorBlockList(100, 100, 200, 200, colorList, 5, 10, 10, 1)
if result:
blocks = json.loads(result)
for block in blocks:
messagebox("找到白色块,左上角坐标:(" + str(block["x"]) + ", " + str(block["y"]) + ")")
else:
messagebox("未找到白色块")
返回值
字符串: 返回识别到的颜色块列表的JSON字符串,格式如下:
[
{
"x": 1,
"y": 2
},
{
"x": 2,
"y": 1
}
]
注意事项
- 颜色范围使用RRGGBB格式,每个通道单独计算范围
- 支持ARGB模式,如#FFFFFFFF
- 颜色匹配类型说明:
- 0: 正常匹配,保留在颜色范围内的像素
- 1: 反色匹配,保留在颜色范围外的像素
- 2: 正常交集匹配,保留在颜色范围内的像素取交集
- 3: 反色交集匹配,保留在颜色范围外的像素取交集
- 当x1,y1,x2,y2都传0时,会查找整个窗口客户区
- 返回的坐标是相对于窗口客户区的坐标
- count参数决定了颜色块中需要匹配的最小像素数量
- width和height参数决定了颜色块的大小
- type参数可以控制是否对结果进行去重处理
- 颜色范围越大,匹配的像素点越多,但可能会影响查找精度
- 如果区域内符合条件的点较多,返回的JSON字符串可能会很长,请注意内存使用
- DLL调用返回的字符串指针需要调用 FreeStringPtr 接口释放内存