查找符合的颜色 - FindColor
函数简介
查找指定区域内符合指定颜色范围的第一个坐标点。此函数可以在指定区域内搜索符合特定颜色范围的第一个像素点,并返回其坐标。支持多种搜索方向,可以灵活应用于图像识别、自动化测试等场景。
每个通道单独计算范围,如颜色范围位3278FA,6496FF,实际对应R(50~100) G(120 ~150) B(250 ~255)
包含下限(>= color1) 包含上限(<= color2)
支持ARGB模式如#FFFFFFFF
x1,y1,x2,y2传0,0,0,0 为查找绑定窗口整个客户区
返回数据为相对窗口坐标
接口名称
FindColor
DLL调用
int FindColor(long ola, int x1,int y1,int x2,int y2,string color1,string color2,int dir,int* intX,int* intY)
参数定义:
ola
(长整型数): OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。x1
(整型数): 区域的左上X坐标y1
(整型数): 区域的左上Y坐标x2
(整型数): 区域的右下X坐标y2
(整型数): 区域的右下Y坐标color1
(字符串): 颜色起始范围,颜色格式 RRGGBBcolor2
(字符串): 颜色结束范围,颜色格式 RRGGBBdir
(整型数): 查找方向:- 0: 从左到右,从上到下
- 1: 从左到右,从下到上
- 2: 从右到左,从上到下
- 3: 从右到左,从下到上
- 4: 从中心往外查找
- 5: 从上到下,从左到右
- 6: 从上到下,从右到左
- 7: 从下到上,从左到右
- 8: 从下到上,从右到左
intX
(整型数指针): 返回X坐标intY
(整型数指针): 返回Y坐标
示例:
// 在窗口客户区查找指定颜色
int x = 0, y = 0;
int ret = FindColor(ola, 0, 0, 0, 0, "057093", "057093", 0, &x, &y);
if (ret == 1) {
printf("找到颜色点,坐标:(%d, %d)\n", x, y);
} else {
printf("未找到颜色点\n");
}
// 在指定区域查找颜色
int x = 0, y = 0;
int ret = FindColor(ola, 100, 100, 200, 200, "FFFFFF", "FFFFFF", 4, &x, &y);
if (ret == 1) {
printf("找到白色点,坐标:(%d, %d)\n", x, y);
} else {
printf("未找到白色点\n");
}
COM调用
int FindColor(int x1,int y1,int x2,int y2,string color1,string color2,int dir,int* intX,int* intY)
参数定义:
x1
(整型数): 区域的左上X坐标y1
(整型数): 区域的左上Y坐标x2
(整型数): 区域的右下X坐标y2
(整型数): 区域的右下Y坐标color1
(字符串): 颜色起始范围,颜色格式 RRGGBBcolor2
(字符串): 颜色结束范围,颜色格式 RRGGBBdir
(整型数): 查找方向:- 0: 从左到右,从上到下
- 1: 从左到右,从下到上
- 2: 从右到左,从上到下
- 3: 从右到左,从下到上
- 4: 从中心往外查找
- 5: 从上到下,从左到右
- 6: 从上到下,从右到左
- 7: 从下到上,从左到右
- 8: 从下到上,从右到左
intX
(整型数指针): 返回X坐标intY
(整型数指针): 返回Y坐标
示例:
# 在窗口客户区查找指定颜色
ret, intX, intY = ola.FindColor(0, 0, 0, 0, "057093", "057093", 0, intX, intY)
if intX >= 0 and intY >= 0:
messagebox("找到颜色点,坐标:(" + str(intX) + ", " + str(intY) + ")")
else:
messagebox("未找到颜色点")
# 在指定区域查找颜色
ret, intX, intY = ola.FindColor(100, 100, 200, 200, "FFFFFF", "FFFFFF", 4, intX, intY)
if intX >= 0 and intY >= 0:
messagebox("找到白色点,坐标:(" + str(intX) + ", " + str(intY) + ")")
else:
messagebox("未找到白色点")
返回值
整型数:
- 0: 失败,未找到符合条件的颜色点
- 1: 成功,找到符合条件的颜色点
注意事项
- 颜色范围使用RRGGBB格式,每个通道单独计算范围
- 支持ARGB模式,如#FFFFFFFF
- 当x1,y1,x2,y2都传0时,会查找整个窗口客户区
- 返回的坐标是相对于窗口客户区的坐标
- 不同的查找方向会影响查找效率和结果,建议根据实际需求选择合适的查找方向
- 颜色范围越大,匹配的像素点越多,但可能会影响查找精度