查找所有符合的颜色 - FindColorList
函数简介
查找指定区域内符合指定颜色范围的所有颜色点。此函数可以在指定区域内搜索所有符合特定颜色范围的像素点,并返回它们的坐标列表。适用于需要批量查找颜色点的场景,如区域分析、图像特征提取等。
每个通道单独计算范围,如颜色范围位3278FA,6496FF,实际对应R(50~100) G(120 ~150) B(250 ~255)
包含下限(>= color1) 包含上限(<= color2)
支持ARGB模式如#FFFFFFFF
x1,y1,x2,y2传0,0,0,0 为截取绑定窗口整个客户区
返回数据为相对窗口坐标
接口名称
FindColorList
DLL调用
long FindColorList(long ola, int x1,int y1,int x2,int y2,string color1,string color2)
参数定义:
ola
(长整型数): OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。x1
(整型数): 区域的左上X坐标y1
(整型数): 区域的左上Y坐标x2
(整型数): 区域的右下X坐标y2
(整型数): 区域的右下Y坐标color1
(字符串): 颜色起始范围,颜色格式 RRGGBBcolor2
(字符串): 颜色结束范围,颜色格式 RRGGBB
示例:
// 在窗口客户区查找所有指定颜色点
long result = FindColorList(ola, 0, 0, 0, 0, "057093", "057093");
if (result != 0) {
// 解析返回的JSON字符串
// 注意:使用完后需要调用FreeStringPtr释放内存
printf("找到颜色点列表:%s\n", result);
FreeStringPtr(ola, result);
} else {
printf("未找到颜色点\n");
}
// 在指定区域查找所有白色点
long result = FindColorList(ola, 100, 100, 200, 200, "FFFFFF", "FFFFFF");
if (result != 0) {
// 解析返回的JSON字符串
printf("找到白色点列表:%s\n", result);
FreeStringPtr(ola, result);
} else {
printf("未找到白色点\n");
}
COM调用
string FindColorList(int x1,int y1,int x2,int y2,string color1,string color2)
参数定义:
x1
(整型数): 区域的左上X坐标y1
(整型数): 区域的左上Y坐标x2
(整型数): 区域的右下X坐标y2
(整型数): 区域的右下Y坐标color1
(字符串): 颜色起始范围,颜色格式 RRGGBBcolor2
(字符串): 颜色结束范围,颜色格式 RRGGBB
示例:
# 在窗口客户区查找所有指定颜色点
result = ola.FindColorList(0, 0, 0, 0, "057093", "057093")
if result:
# 解析返回的JSON字符串
points = json.loads(result)
for point in points:
messagebox("找到颜色点,坐标:(" + str(point["X"]) + ", " + str(point["Y"]) + ")")
else:
messagebox("未找到颜色点")
# 在指定区域查找所有白色点
result = ola.FindColorList(100, 100, 200, 200, "FFFFFF", "FFFFFF")
if result:
points = json.loads(result)
for point in points:
messagebox("找到白色点,坐标:(" + str(point["X"]) + ", " + str(point["Y"]) + ")")
else:
messagebox("未找到白色点")
返回值
字符串: 返回识别到的坐标点列表的JSON字符串,格式如下:
[
{
"X": 19,
"Y": 18
},
{
"X": 20,
"Y": 18
},
{
"X": 22,
"Y": 18
}
]
注意事项
- 颜色范围使用RRGGBB格式,每个通道单独计算范围
- 支持ARGB模式,如#FFFFFFFF
- 当x1,y1,x2,y2都传0时,会查找整个窗口客户区
- 返回的坐标是相对于窗口客户区的坐标
- 返回的JSON字符串需要解析后才能使用
- DLL调用返回的字符串指针需要调用 FreeStringPtr 接口释放内存
- 颜色范围越大,匹配的像素点越多,但可能会影响查找精度
- 如果区域内符合条件的点较多,返回的JSON字符串可能会很长,请注意内存使用