图色函数
说明
- 截图函数需要Android 5.0 以上版本才能使用
- 无障碍模式下截图是需要权限的,如果弹出了运行截图,请授权
- 代理模式下的截图不需要权限,建议长期运行使用代理模式
- 图色模块的对象前缀是image,例如 image.requestScreenCapture()这样调用
- 图色模块需要对颜色进行查找,开发工具自带找色功能
设置
image.useOpencvMat 切换图片存储
- 切换图片存储模式为opencv的mat格式
- 这个函数调用会初始化OPENCV,所以打包的时候组件要包含opencv组件(找图组件)
- 适合 EC 10.18.0+
- 切换后抓图、读取图片、找图、找色等都会切换到mat格式,速度更快内存更少
- 如果让图片格式切换请参考 imageToMatFormat和matToImageFormat两个函数
- @param use 1 是 0 否
- @return
{boolean|*}
true 成功 false 失败
function main() {
let r = image.useOpencvMat(1);
logd(r)
//剩下的代码和之前一样 找色 找图等操作
}
main();
image.setInitParam 初始化参数
- 设置图色模块初始化参数,设置找图超时时间
- @param action_timeout 找图找色动作的最大时间,超时后会自动返回避免阻塞,单位是毫秒
- @param auto_click_request_dialog 是否自动点击截屏授权对话框,默认是true,自动点击
function main() {
//action_timeout 找图找色动作的最大时间,超时后会自动返回避免阻塞
// auto_click_request_dialog 是否自动点击截屏授权对话框,默认是true,自动点击
// image.setInitParam({"action_timeout":1000});
image.setInitParam(
{
"action_timeout": 20000,
"auto_click_request_dialog": false
}
);
}
main();
image.setFindColorImageMode 设置找色找图的算法模式
- 设置找色找图的算法模式
- 适合EC 9.10.0+
- @param type 1 代表老的查找算法,2代表新的查找算法
- @return
{boolean}
function main() {
image.setFindColorImageMode(2);
}
main();
申请截图
image.requestScreenCapture 申请截图权限
- 向系统申请屏幕截图权限,返回是否请求成功。
- 第一次使用该函数会弹出截图权限请求,建议选择“总是允许”。
- 这个函数只是申请截图权限,并不会真正执行截图,真正的截图函数是captureScreen()。
- 该函数在截图脚本中只需执行一次,而无需每次调用captureScreen()都调用一次。
- @param timeout 超时时间,单位是毫秒
- @param type 截屏的类型,0 自动选择,1 代表授权模式,2 代表无需权限模式(该模式前提条件:运行模式为代理模式)
- @return true 代表成功 false代表失败
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
let request = image.requestScreenCapture(10000, 0);
if (!request) {
request = image.requestScreenCapture(10000, 0);
}
logd("申请截图结果... " + request)
if (!request) {
loge("申请截图权限失败,检查是否开启后台弹出,悬浮框等权限")
exit()
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
}
main();
image.releaseScreenCapture 释放截屏请求
- 释放截屏请求
function main() {
image.releaseScreenCapture();
}
main();
截图
image.captureScreen 截取屏幕Image对象
- 截取当前屏幕并返回一个Image对象。
- 没有截图权限时执行该函数会返回null
- 两次调用可能返回相同的Image对象。这是因为设备截图的更新需要一定的时间,短时间内(一般来说是16ms)连续调用则会返回同一张截图。
- 截图需要转换为Bitmap格式,从而该函数执行需要一定的时间(0~20ms)。
- 另外在requestScreenCapture()执行成功后需要一定时间后才有截图可用,因此如果立即调用captureScreen(),会等待一定时间后( 一般为几百ms)才返回截图。
- 如果区域空或则有负数的,就会是全屏
- @param retryNumber 重试次数,直到能截到图为止,默认是3
- @param x 截图的起始X坐标
- @param y 截图的起始Y坐标
- @param ex 终点X坐标
- @param ey 终点Y坐标
- @return AutoImage对象或者null
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
let request = image.requestScreenCapture(10000, 0);
if (!request) {
request = image.requestScreenCapture(10000, 0);
}
logd("申请截图结果... " + request)
if (!request) {
loge("申请截图权限失败,检查是否开启后台弹出,悬浮框等权限")
exit()
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
for (let i = 0; i < 10; i++) {
let cap = image.captureScreen(3, 0, 0, 300, 400)
logd("截图数据: " + cap)
sleep(1000)
//图片要回收
image.recycle(cap)
}
}
main();
image.captureFullScreen 截取全屏Image对象
- 截取当前屏幕并返回一个Image对象。
- @return AutoImage对象或者null
function main() {
logd("isServiceOk " + isServiceOk());
startEnv()
logd("isServiceOk " + isServiceOk());
let request = image.requestScreenCapture(10000, 0);
if (!request) {
request = image.requestScreenCapture(10000, 0);
}
logd("申请截图结果... " + request)
if (!request) {
loge("申请截图权限失败,检查是否开启后台弹出,悬浮框等权限")
exit()
}
//申请完权限至少等1s(垃圾设备多加点)再截图,否则会截不到图
sleep(1000)
for (let i = 0; i < 10; i++) {
let cap = image.captureFullScreen()
logd("截图数据: " + cap)
sleep(1000)
//图片要回收
image.recycle(cap)
}
}
main();