🛰️ 智能识图模块(FI)
📌 函数: HCFI_FindImage
描述
识图(返回的是圆型的圆点)
原型
__int64 __stdcall HCFI_FindImageA(__int32 窗口序号,char* 图片名字集合,doublesim=0.8,BOOL 是否灰度图=FALSE,BOOL 是否打开查看器=FALSE);__int64 __stdcall HCFI_FindImageW(__int32 窗口序号,wchar_t* 图片名字集合,doublesim=0.8,BOOL 是否灰度图=FALSE,BOOL 是否打开查看器=FALSE);
参数
__int32 窗口序号 - 窗口序号(从1开始)
char* 图片名字集合 - 如
sim - 相似度0-1
bool 是否灰度图 - 是否灰度图一般开启就行
bool 是否打开查看器 - 是否打开
返回值
查看返回值表
注意事项
图片越多耗时多长
json:
{\"error\":0,\"ret\":AAA,\"data\":[{\"x\":XX,\"y\":YY},{\"x\":XX,\"y\":YY},{\"x\":XX,\"y\":YY}],\"time\":ZZZ}
每张图会有1个坐标点(圆点)
AAA:表示找到几个XX:X坐标YY:Y坐标XX或YY:-1图片打不开-2未找到匹配点-3匹配点小于0time:毫秒耗时data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
HCFI_FindImage - 基础示例
.版本 2
.子程序 _测试基础找图A, 逻辑型
.局部变量 窗口句柄, 整数型
.局部变量 图片集合, 文本型
.局部变量 相似度, 双精度小数型
.局部变量 找图结果, 逻辑型
.局部变量 坐标数组, HD_坐标, 数组
.局部变量 循环计数, 整数型
' 第一步:初始化窗口环境
窗口句柄 = 寻找窗口 (#窗口类名, #窗口标题)
.如果 (窗口句柄 = 0)
调试输出 ("未找到目标窗口")
返回 (假)
.如果结束
' 绑定窗口到HD库
.如果 (HD环境_初始化窗口 (0, 窗口句柄, "") = 假)
调试输出 ("HD环境初始化失败")
返回 (假)
.如果结束
' 第二步:配置找图参数
图片集合 = "登录按钮.bmp|开始按钮.bmp|确定按钮.bmp"
相似度 = 0.85 ' 设置85%相似度
' 第三步:执行找图
找图结果 = HD智能识图_找图A (0, 图片集合, 相似度, 真, 假, 坐标数组)
' 第四步:处理结果
.如果 (找图结果 = 真)
调试输出 ("找图成功!共找到", 取数组成员数 (坐标数组), "个结果")
' 遍历所有找到的结果
.计次循环首 (取数组成员数 (坐标数组), 循环计数)
调试输出 ("结果", 循环计数, ":")
调试输出 (" 位置: (", 坐标数组 [循环计数].x, ",", 坐标数组 [循环计数].y, ")")
调试输出 (" 相似度:", 坐标数组 [循环计数].sim)
调试输出 (" 图片序号:", 坐标数组 [循环计数].序号)
' 如果需要点击,使用圆心坐标
' HD后台_鼠标单击 (0, 坐标数组 [循环计数].x, 坐标数组 [循环计数].y, 1, 1)
.计次循环尾 ()
' 获取详细JSON信息
调试输出 ("详细JSON数据:", HD通用_获取最近返回json (0))
返回 (真)
.否则
调试输出 ("找图失败,原因可能是:")
调试输出 ("1. 图片文件不存在或路径错误")
调试输出 ("2. 相似度设置过高")
调试输出 ("3. 窗口内容与模板图片不匹配")
调试输出 ("错误信息:", HD通用_获取最近返回json (0))
返回 (假)
.如果结束
' 快速示例:单张图片查找
.子程序 _快速找图示例
.局部变量 结果数组, HD_坐标, 数组
.如果 (HD智能识图_找图A (0, "目标.bmp", 0.9, 真, 假, 结果数组))
.如果 (取数组成员数 (结果数组) > 0)
' 点击第一个找到的位置
HD后台_鼠标单击 (0, 结果数组 [1].x, 结果数组 [1].y, 1, 1)
调试输出 ("已点击位置: (", 结果数组 [1].x, ",", 结果数组 [1].y, ")")
.如果结束
.如果结束
HCFI_FindImage - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HCFI_FindImage - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HCFI_FindImageEx
描述
识图(返回的是矩形左上角和右下角)
原型
__int64 __stdcall HCFI_FindImageExA(__int32 窗口序号,char* 图片名字集合,doublesim=0.8,BOOL 是否灰度图=FALSE,BOOL 是否打开查看器=FALSE);__int64 __stdcall HCFI_FindImageExW(__int32 窗口序号,wchar_t* 图片名字集合,doublesim=0.8,BOOL 是否灰度图=FALSE,BOOL 是否打开查看器=FALSE);
参数
__int32 窗口序号 - 窗口序号(从1开始)
char* 图片名字集合 - 如
sim - 相似度0-1
bool 是否灰度图 - 是否灰度图一般开启就行
bool 是否打开查看器 - 是否打开
返回值
查看返回值表
注意事项
图片越多耗时多长
json:
{\"error\":0,\"ret\":AAA,\"data\":[{\"x1\":XX,\"y1\":YY,\"x2\":XX,\"y2\":YY},{\"x1\":XX,\"y1\":YY,\"x2\":XX,\"y2\":YY}],\"time\":ZZZ}
每张图会有2个坐标点(左上角+右下角)
AAA:表示找到几个XX:X坐标YY:Y坐标XX或YY:-1图片打不开-2未找到匹配点-3匹配点小于0time:毫秒耗时data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
HCFI_FindImageEx - 基础示例
.子程序 _测试矩形找图Ex
.局部变量 矩形数组, HD_2个坐标, 数组
.局部变量 图片列表, 文本型
.局部变量 i, 整数型
.局部变量 矩形宽度, 整数型
.局部变量 矩形高度, 整数型
.局部变量 中心点X, 整数型
.局部变量 中心点Y, 整数型
图片列表 = "工具栏.bmp|菜单栏.bmp|状态栏.bmp"
.如果 (HD智能识图_找图ExA (0, 图片列表, 0.9, 真, 假, 矩形数组))
调试输出 ("矩形找图成功!共找到", 取数组成员数 (矩形数组), "个矩形区域")
.计次循环首 (取数组成员数 (矩形数组), i)
' 计算矩形属性
矩形宽度 = 矩形数组 [i].x2 - 矩形数组 [i].x1
矩形高度 = 矩形数组 [i].y2 - 矩形数组 [i].y1
中心点X = 矩形数组 [i].x1 + 矩形宽度 ÷ 2
中心点Y = 矩形数组 [i].y1 + 矩形高度 ÷ 2
调试输出 ("矩形", i, "信息:")
调试输出 (" 左上角: (", 矩形数组 [i].x1, ",", 矩形数组 [i].y1, ")")
调试输出 (" 右下角: (", 矩形数组 [i].x2, ",", 矩形数组 [i].y2, ")")
调试输出 (" 尺寸: ", 矩形宽度, "×", 矩形高度)
调试输出 (" 中心点: (", 中心点X, ",", 中心点Y, ")")
调试输出 (" 相似度:", 矩形数组 [i].sim)
调试输出 (" 图片序号:", 矩形数组 [i].序号)
' 实际应用:在矩形区域内进行其他操作
' 比如截取该区域的图片进行进一步分析
' HD截图_指定区域截图 (0, 矩形数组 [i].x1, 矩形数组 [i].y1, 矩形数组 [i].x2, 矩形数组 [i].y2, "区域" + 到文本 (i) + ".bmp")
.计次循环尾 ()
.否则
调试输出 ("矩形找图失败")
.如果结束
HCFI_FindImageEx - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HCFI_FindImageEx - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HCFI_FindRangeImage
描述
范围内识图
原型
__int64 __stdcall HCFI_FindRangeImageA(__int32 窗口序号,__int32 x,__int32 y,__int32 w,__int32 h,char* 图片名字集合,__int32 type=0,doublesim=0.8,BOOL 是否灰度图=FALSE,BOOL 是否打开查看器=FALSE);__int64 __stdcall HCFI_FindRangeImageW(__int32 窗口序号,__int32 x,__int32 y,__int32 w,__int32 h,wchar_t* 图片名字集合,__int32 type=0,doublesim=0.8,BOOL 是否灰度图=FALSE,BOOL 是否打开查看器=FALSE);
参数
__int32 窗口序号 - 窗口序号(从1开始)
__int32 x,y,w,h - 左上角+高度+宽度
char* 图片名字集合 - 如
__int32 type - 0表示返回圆点1表示返回矩形左上角和右下角
sim - 相似度0-1
bool 是否灰度图 - 是否灰度图一般开启就行
bool 是否打开查看器 - 是否打开
返回值
查看返回值表
注意事项
图片越多耗时多长
json:
{\"error\":0,\"ret\":AAA,\"data\":[{\"x\":XX,\"y\":YY},{\"x\":XX,\"y\":YY},{\"x\":XX,\"y\":YY}]}type==0</STRONG>
每张图会有1个坐标点(圆点)
{\"error\":0,\"ret\":AAA,\"data\":[{\"x1\":XX,\"y1\":YY,\"x2\":XX,\"y2\":YY},{\"x1\":XX,\"y1\":YY,\"x2\":XX,\"y2\":YY}]}type==1</STRONG>
每张图会有2个坐标点(左上角+右下角)
AAA:表示找到几个XX:X坐标YY:Y坐标XX或YY:-1图片打不开-2未找到匹配点-3匹配点小于0time:毫秒耗时data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
HCFI_FindRangeImage - 基础示例
.子程序 _测试范围找图ExA
.局部变量 搜索区域X1, 整数型
.局部变量 搜索区域Y1, 整数型
.局部变量 搜索区域X2, 整数型
.局部变量 搜索区域Y2, 整数型
.局部变量 图片Unicode, 字节集
.局部变量 返回类型, 整数型
.局部变量 点坐标结果, HD_坐标, 数组
.局部变量 矩形坐标结果, HD_2个坐标, 数组
.局部变量 图片集合, 文本型
' 第一步:定义搜索范围(屏幕左上角区域)
搜索区域X1 = 0
搜索区域Y1 = 0
搜索区域X2 = 800
搜索区域Y2 = 600
' 第二步:准备图片集合
图片集合 = "菜单按钮.bmp|工具栏图标.bmp|状态指示器.bmp"
图片Unicode = 到字节集 (图片集合, #编码_UTF16_LE, 真)
' 第三步:测试返回圆心坐标 (type=0)
返回类型 = 0
调试输出 ("开始范围找图测试 - 返回圆心坐标")
调试输出 ("搜索范围: (", 搜索区域X1, ",", 搜索区域Y1, ") 到 (", 搜索区域X2, ",", 搜索区域Y2, ")")
.如果 (HD智能识图_范围找图ExA (0, 搜索区域X1, 搜索区域Y1, 搜索区域X2, 搜索区域Y2, 图片Unicode, 返回类型, 0.85, 真, 假, 点坐标结果, 矩形坐标结果))
调试输出 ("圆心坐标查找成功!找到", 取数组成员数 (点坐标结果), "个结果")
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (点坐标结果), i)
调试输出 ("圆心", i, ": (", 点坐标结果 [i].x, ",", 点坐标结果 [i].y, ") 相似度:", 点坐标结果 [i].sim)
' 检查坐标是否在指定范围内
.如果 (点坐标结果 [i].x ≥ 搜索区域X1 且 点坐标结果 [i].x ≤ 搜索区域X2 且 点坐标结果 [i].y ≥ 搜索区域Y1 且 点坐标结果 [i].y ≤ 搜索区域Y2)
调试输出 (" ✓ 坐标在指定范围内")
.否则
调试输出 (" ✗ 坐标超出指定范围")
.如果结束
.计次循环尾 ()
.否则
调试输出 ("圆心坐标查找失败")
.如果结束
' 第四步:测试返回矩形坐标 (type=1)
返回类型 = 1
调试输出 ("")
调试输出 ("开始范围找图测试 - 返回矩形坐标")
.如果 (HD智能识图_范围找图ExA (0, 搜索区域X1, 搜索区域Y1, 搜索区域X2, 搜索区域Y2, 图片Unicode, 返回类型, 0.85, 真, 假, 点坐标结果, 矩形坐标结果))
调试输出 ("矩形坐标查找成功!找到", 取数组成员数 (矩形坐标结果), "个结果")
.计次循环首 (取数组成员数 (矩形坐标结果), i)
.局部变量 宽度, 整数型
.局部变量 高度, 整数型
宽度 = 矩形坐标结果 [i].x2 - 矩形坐标结果 [i].x1
高度 = 矩形坐标结果 [i].y2 - 矩形坐标结果 [i].y1
调试输出 ("矩形", i, ":")
调试输出 (" 左上角: (", 矩形坐标结果 [i].x1, ",", 矩形坐标结果 [i].y1, ")")
调试输出 (" 右下角: (", 矩形坐标结果 [i].x2, ",", 矩形坐标结果 [i].y2, ")")
调试输出 (" 尺寸: ", 宽度, "×", 高度)
调试输出 (" 相似度:", 矩形坐标结果 [i].sim)
调试输出 (" 图片序号:", 矩形坐标结果 [i].序号)
.计次循环尾 ()
.否则
调试输出 ("矩形坐标查找失败")
.如果结束
HCFI_FindRangeImage - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HCFI_FindRangeImage - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HD智能识图_Tem找图从文件
描述
从文件中加载截图数据并识图(返回的是矩形左上角和右下角)
原型
__int64 __stdcall HCFI_FindImageByFile(__int32 窗口序号,char* 原图名字,char* 子图片名字集合,doublesim=0.9,BOOL 是否灰度图=FALSE,BOOL 是否打开查看器=FALSE);
参数
__int32 窗口序号 - 窗口序号(从1开始)
char* 原图名字 - 指定一张原图文件名(支持绝对路径和相对路径)
char* 图片名字集合 - 如
sim - 相似度0-1
bool 是否灰度图 - 是否灰度图一般开启就行
bool 是否打开查看器 - 是否打开
返回值
查看返回值表
注意事项
图片越多耗时多长
json:
{\"error\":0,\"ret\":AAA,\"data\":[{\"x1\":XX,\"y1\":YY,\"x2\":XX,\"y2\":YY},{\"x1\":XX,\"y1\":YY,\"x2\":XX,\"y2\":YY}],\"time\":ZZZ}
每张图会有2个坐标点(左上角+右下角)
AAA:表示找到几个XX:X坐标YY:Y坐标XX或YY:-1图片打不开-2未找到匹配点-3匹配点小于0max:置信度time:毫秒耗时data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
HD智能识图_Tem找图从文件 - 基础示例
.子程序 _测试从文件找图
.局部变量 原图文件, 文本型
.局部变量 子图集合, 文本型
.局部变量 结果数组, HD_2个坐标, 数组
.局部变量 查找成功, 逻辑型
' 设置文件路径
原图文件 = "D:\截图\游戏截图.png"
子图集合 = "按钮1.bmp|按钮2.bmp|图标.bmp"
' 检查原图文件是否存在
.如果 (文件是否存在 (原图文件) = 假)
调试输出 ("原图文件不存在:", 原图文件)
返回 (假)
.如果结束
' 执行从文件找图
查找成功 = HD智能识图_找图从文件 (0, 原图文件, 子图集合, 0.8, 真, 假, 结果数组)
.如果 (查找成功)
调试输出 ("从文件找图成功!在", 原图文件, "中找到", 取数组成员数 (结果数组), "个匹配")
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (结果数组), i)
调试输出 ("匹配", i, ":")
调试输出 (" 区域: (", 结果数组 [i].x1, ",", 结果数组 [i].y1, ") 到 (", 结果数组 [i].x2, ",", 结果数组 [i].y2, ")")
调试输出 (" 相似度:", 结果数组 [i].sim)
调试输出 (" 子图序号:", 结果数组 [i].序号)
' 可以根据子图序号判断找到的是哪个模板
.判断开始 (结果数组 [i].序号)
.判断 (结果数组 [i].序号 = 0)
调试输出 (" 找到了: 按钮1.bmp")
.判断 (结果数组 [i].序号 = 1)
调试输出 (" 找到了: 按钮2.bmp")
.判断 (结果数组 [i].序号 = 2)
调试输出 (" 找到了: 图标.bmp")
.判断结束
.计次循环尾 ()
返回 (真)
.否则
调试输出 ("从文件找图失败")
调试输出 ("可能原因:")
调试输出 ("1. 原图文件格式不支持")
调试输出 ("2. 子图模板在原图中不存在")
调试输出 ("3. 相似度设置过高")
返回 (假)
.如果结束
HD智能识图_Tem找图从文件 - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD智能识图_Tem找图从文件 - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")
📌 函数: HD智能识图_Tem找图从内存
描述
从内存中加载截图数据并识图(返回的是矩形左上角和右下角)
原型
__int64 __stdcall HCFI_FindImageByMem(__int32 窗口序号,BYTE* data,__int32 dataSize,char* 子图片名字集合,doublesim=0.8,BOOL 是否灰度图=FALSE,BOOL 是否打开查看器=FALSE);
参数
__int32 窗口序号 - 窗口序号(从1开始)
byte* data - Bmp图片字节数据缓冲区地址
__int32 dataSize - Bmp图片字节大小
char* 图片名字集合 - 如
sim - 相似度0-1
bool 是否灰度图 - 是否灰度图一般开启就行
bool 是否打开查看器 - 是否打开
返回值
查看返回值表
注意事项
图片越多耗时多长
json:
{\"error\":0,\"ret\":AAA,\"data\":[{\"i\":index,\"x1\":XX,\"y1\":YY,\"x2\":XX,\"y2\":YY\"max\":0.0f},{\"i\":index,\"x1\":XX,\"y1\":YY,\"x2\":XX,\"y2\":YY\"max\":0.0f}]}每张图对应会有图片索引+2个坐标点(左上角+右下角)+置信度(max)index:图片集合指定的索引(0开始)如:\"洛阳.bmp|洱海.bmp|\"(洛阳.bmp)索引就是0AAA:表示找到几个(真正的找到数量)XX:X坐标YY:Y坐标XX或YY:-1图片打不开-2未找到匹配点-3匹配点小于0max:置信度time:毫秒耗时data:是一个json数组,每一个元素是一个XY坐标分别对应图片路径参数的位置
HD智能识图_Tem找图从内存 - 基础示例
.子程序 _测试从内存找图
.局部变量 图片数据, 字节集
.局部变量 子图模板, 文本型
.局部变量 内存结果, HD_2个坐标, 数组
.局部变量 图片文件, 文本型
图片文件 = "原图.bmp"
子图模板 = "目标.bmp|按钮.bmp"
' 第一步:读取图片到内存
.如果 (文件是否存在 (图片文件) = 假)
调试输出 ("图片文件不存在:", 图片文件)
返回 (假)
.如果结束
图片数据 = 读入文件 (图片文件)
.如果 (取字节集长度 (图片数据) = 0)
调试输出 ("读取图片数据失败")
返回 (假)
.如果结束
调试输出 ("图片数据大小:", 取字节集长度 (图片数据), "字节")
' 第二步:从内存数据中查找
.如果 (HD智能识图_找图从内存 (0, 图片数据, 子图模板, 0.9, 真, 假, 内存结果))
调试输出 ("内存找图成功!找到", 取数组成员数 (内存结果), "个结果")
.局部变量 j, 整数型
.计次循环首 (取数组成员数 (内存结果), j)
调试输出 ("内存匹配", j, ":")
调试输出 (" 坐标: (", 内存结果 [j].x1, ",", 内存结果 [j].y1, ") - (", 内存结果 [j].x2, ",", 内存结果 [j].y2, ")")
调试输出 (" 相似度:", 内存结果 [j].sim)
调试输出 (" 模板序号:", 内存结果 [j].序号)
.计次循环尾 ()
返回 (真)
.否则
调试输出 ("内存找图失败")
调试输出 ("错误信息:", HD通用_获取最近返回json (0))
返回 (假)
.如果结束
HD智能识图_Tem找图从内存 - 进阶用法
.版本 2
.子程序 示例2
调试输出("示例2")
HD智能识图_Tem找图从内存 - 高级应用
.版本 2
.子程序 高级示例
调试输出("高级示例")