说明
截图函数需要Andrioid 5.0 以上版本才能使用
无障碍模式下截图是需要权限的,如果弹出了运行截图,请授权
代理模式下的截图不需要权限,建议长期运行使用代理模式
图色模块的对象前缀是image,例如 image.requestScreenCapture()这样调用
图色模块需要对颜色进行查找,开发工具自带找色功能,请参考找色找图操作
设置
image.setInitParam(params)
设置图色模块初始化参数,可用于多分辨率兼容
@param params 超时时间,单位是毫秒
@return true 代表成功 false代表失败
function main() { //action_timeout 找图找色动作的最大时间,超时后会自动返回避免阻塞 var a = image.setInitParam({"action_timeout":1000}); } main();
申请截图
image.requestScreenCapture(timeout,type)
向系统申请屏幕截图权限,返回是否请求成功。
第一次使用该函数会弹出截图权限请求,建议选择“总是允许”。
这个函数只是申请截图权限,并不会真正执行截图,真正的截图函数是captureScreen()。
该函数在截图脚本中只需执行一次,而无需每次调用captureScreen()都调用一次。
@param timeout 超时时间,单位是毫秒
@param type 截屏的类型,0 自动选择,1 代表授权模式,2 代表无需权限模式(该模式前提条件:运行模式为代理模式)
@return true 代表成功 false代表失败
function main() { logd("isServiceOk "+isServiceOk()); startEnv() logd("isServiceOk "+isServiceOk()); var request = image.requestScreenCapture(10000,0); if (!request) { request = image.requestScreenCapture(10000,0); } logd("申请截图结果... "+request) } main();
初始化截图并测试截图
if (autoRequestScreenCapture()) { // 截图测试 for (var i = 0; i < 3; i++) { var cap = image.captureScreen(3,0,0,300,400) sleep(1000); // 转成base64的字符串, jpg格式较小,可以减少内存 var ds = image.toBase64Format(cap,"jpg",50); logd(ds) } } else { loge('初始化截图权限失败!'); } /** @description 初始化截图权限 @version 20210102 @author 飞云<283054503@qq.com> @return boolean:返回是否请求成功 */ function autoRequestScreenCapture() { // 设置图色模块初始化参数,可用于多分辨率兼容 image.setInitParam({"action_timeout": 1000}); // 向系统申请屏幕截图权限,返回是否请求成功 if (isAccMode()) { let result = image.requestScreenCapture(10000, 0); //自动点击允许 if (result) { sleep(1000); //避免初次截图,返回null } else { loge('申请截图权限失败'); return false; } } else { // logd('不需要截图权限'); } return true; }
image.releaseScreenCapture()
释放截屏请求
function main() { image.releaseScreenCapture(); } main();
截图
image.captureFullScreen()
全屏截图:截取当前屏幕并返回一个Image对象。
@return AutoImage对象或者null
function main() { logd("isServiceOk "+isServiceOk()); startEnv() logd("isServiceOk "+isServiceOk()); var request = image.requestScreenCapture(10000,0); if (!request) { request = image.requestScreenCapture(10000,0); } logd("申请截图结果... "+request) if (!request) { return; } home(); sleep(1000); for (var i = 0; i < 10; i++) { var cap = image.captureFullScreen() logd("截图数据: " +cap) sleep(1000) } } main();
image.captureFullScreenEx()
全屏截图:抓取全屏函数
代理模式下并且requestScreenCapture函数的type为0的时候,会使用截屏函数,尽力消除色差问题。
@return AutoImage对象或者null
function main() { logd("isServiceOk "+isServiceOk()); startEnv() logd("isServiceOk "+isServiceOk()); var request = image.requestScreenCapture(10000,0); if (!request) { request = image.requestScreenCapture(10000,0); } logd("申请截图结果... "+request) if (!request) { return; } home(); sleep(1000); for (var i = 0; i < 10; i++) { var cap = image.captureFullScreenEx() logd("截图数据: " +cap) sleep(1000) } } main();
image.captureScreen(retryNumber,x1,y1,x2,y2)
区域截图:截取当前屏幕并返回一个Image对象。
没有截图权限时执行该函数会返回null
两次调用可能返回相同的Image对象。这是因为设备截图的更新需要一定的时间,短时间内(一般来说是16ms)连续调用则会返回同一张截图。
截图需要转换为Bitmap格式,从而该函数执行需要一定的时间(0~20ms)。
另外在requestScreenCapture()执行成功后需要一定时间后才有截图可用,因此如果立即调用captureScreen(),会等待一定时间后(一般为几百ms)才返回截图。
如果区域空或则有负数的,就会是全屏
@param retryNumber 重试次数,直到能截到图为止,默认是3
@param x1 截图的起始X坐标
@param y1 截图的起始Y坐标
@param x2 终点X坐标
@param y2 终点Y坐标
@return AutoImage对象或者null
function main() { logd("isServiceOk "+isServiceOk()); startEnv() logd("isServiceOk "+isServiceOk()); var request = image.requestScreenCapture(10000,0); if (!request) { request = image.requestScreenCapture(10000,0); } logd("申请截图结果... "+request) if (!request) { return; } home(); sleep(1000); for (var i = 0; i < 10; i++) { var cap = image.captureScreen(3,0,0,300,400) logd("截图数据: " +cap) sleep(1000) } } main();
image.captureScreenBitmap(format,x1,y1,x2,y2,quality)
将屏幕抓取为Bitmap对象,如果中间有-1或者宽度、宽度为-1,将会是全屏
@param format jpg或者png,代理模式下有用
@param x1 开始X坐标
@param y1 开始Y坐标
@param x2 终点X坐标
@param y2 终点Y坐标
@param quality 图片质量,1 - 100,越高越好,代理模式下有用
@return Bitmap null或者bitmap对象
function main() { logd("isServiceOk "+isServiceOk()); startEnv() logd("isServiceOk "+isServiceOk()); var request = image.requestScreenCapture(10000,0); if (!request) { request = image.requestScreenCapture(10000,0); } logd("申请截图结果... "+request) if (!request) { return; } home(); sleep(1000); for (var i = 0; i < 10; i++) { var cap = image.captureScreenBitmap("jpg",100,100,200,300,100); logd("截图数据: " +cap) sleep(1000) } } main();
image.captureToFile(retryNumber,x1,y1,x2,y2,path)
截取当前屏幕并以PNG格式保存到path中。
如果文件不存在会被创建;文件存在会被覆盖。
如果区域空或则有负数的,就会是全屏
@param retryNumber 重试次数,直到能截到图为止,默认是3
@param x1 截图的起始X坐标
@param y1 截图的起始Y坐标
@param x2 终点X坐标
@param y2 终点Y坐标
@param path 截图保存路径
@return true 截图成功 false 代表不成功
function main() { logd("isServiceOk "+isServiceOk()); startEnv() logd("isServiceOk "+isServiceOk()); var request = image.requestScreenCapture(10000,0); if (!request) { request = image.requestScreenCapture(10000,0); } logd("申请截图结果... "+request) if (!request) { return; } home(); sleep(1000); for (var i = 0; i < 10; i++) { var cap = image.captureToFile(3,0,0,300,400,"/sdcard/a"+i+".png"); logd("截图数据: " +cap) sleep(1000) } } main();