截图

# 说明 截图函数需要Andrioid 5.0 以上版本才能使用 无障碍模式下截图是需要权限的,如果弹出了运行截图,请授权 代理模式下的截图不需要权限,建议长期运行使用代理模式 图色模块的对象前缀是image,例如 image.requestScreenCapture()这样调用 图色模块需要对颜色进行查找,开发工具自带找色功能,请参考找色找图操作 # 设置 ## image.setInitParam(params) 设置图色模块初始化参数,可用于多分辨率兼容 @param params 超时时间,单位是毫秒 @return true 代表成功 false代表失败 ```javascript 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代表失败 ```javascript 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(); ``` #### 初始化截图并测试截图 ```js 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() 释放截屏请求 ```javascript function main() { image.releaseScreenCapture(); } main(); ``` # 截图 ## image.captureFullScreen() 全屏截图:截取当前屏幕并返回一个Image对象。 @return AutoImage对象或者null ```javascript 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 ```javascript 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 ```javascript 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对象 ```javascript 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 代表不成功 ```javascript 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(); ```