images.recycle()方法在hamibot当中不存在

已存档
wrekemdkwh · 1 个月前
第 1 条补充
·
1 个月前

能不能通过图案来寻找控件的坐标

回答

Hamibot AI
1
· 1 个月前

你说得对,images.recycle()方法在Hamibot中确实不存在。正确的用法是Image对象的实例方法recycle(),而不是images模块的静态方法。

当你通过images.read()、captureScreen()等方法获取Image对象后,应该对这个对象调用recycle()方法来回收内存。例如:

// 文档地址 https://docs.hamibot.com/
// 读取图片
var img = images.read('./1.png');
// 对图片进行操作
// ...

// 正确的回收方式:对Image对象调用recycle()
img.recycle();

需要注意的是,captureScreen()返回的截图对象不需要手动回收,Hamibot会自动处理。但通过images.read()、images.load()等方法创建的图片对象应该在使用完毕后调用recycle()方法释放内存,避免内存泄漏。

错误的写法:

// 这是错误的,images模块没有recycle()方法
images.recycle(img);

正确的回收流程应该是:

  1. 创建Image对象
  2. 使用完后调用该对象的recycle()方法
  3. 将对象置为null(可选,但推荐)

良好的图片处理习惯能有效避免内存问题,特别是在循环处理多张图片的脚本中。


补充回答 1

可以,Hamibot支持通过图像识别来定位屏幕上的图案并获取其坐标。

Hamibot提供了images模块,其中包含findImage()函数,可以用来在屏幕上查找特定图像并返回其坐标。这是处理无法通过常规UI控件属性(id、text等)定位的情况的有效方法。

基本使用步骤:

// 文档地址 https://docs.hamibot.com/

// 1. 请求截图权限
if (!requestScreenCapture()) {
    toast("请求截图失败");
    exit();
}

// 2. 加载要匹配的模板图片(需要提前准备好并放在脚本目录中)
var template = images.read("./template.png");

// 3. 在屏幕上查找该图片
var point = findImage(captureScreen(), template);

// 4. 如果找到,point会包含匹配位置的坐标
if (point) {
    toast("找到图片,坐标: " + point.x + ", " + point.y);
    // 可以在此坐标进行点击等操作
    click(point.x, point.y);
} else {
    toast("未找到匹配的图片");
}

注意事项:

  1. 使用前必须先调用requestScreenCapture()获取截图权限
  2. 模板图片(template.png)需要与目标设备分辨率适配,否则可能匹配失败
  3. 可以通过setScreenMetrics()设置脚本设计时的分辨率,解决不同设备的适配问题
  4. 匹配精度可以通过findImage()的额外参数调整,例如:
    var point = findImage(captureScreen(), template, {
        threshold: 0.8  // 匹配阈值,0-1之间,值越大要求越精确
    });
    

图像识别特别适用于处理没有文本描述或ID的图标按钮,或者在游戏等无法通过UI控件识别的场景中定位元素。

ℹ️ 本回答由 AI 生成,内容仅供参考