截图
# 说明
截图函数需要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();
```