1. 说明
- 截图函数需要Andrioid 5.0 以上版本才能使用
- 无障碍模式下截图是需要权限的,如果弹出了运行截图,请授权
- 代理模式下的截图不需要权限,建议长期运行使用代理模式
- 图色模块的对象前缀是image,例如 image.requestScreenCapture()这样调用
- 图色模块需要对颜色进行查找,开发工具自带找色功能,请参考找色找图操作
2. 申请截图
2.1. image.requestScreenCapture
- 向系统申请屏幕截图权限,返回是否请求成功。
- 第一次使用该函数会弹出截图权限请求,建议选择“总是允许”。
- 这个函数只是申请截图权限,并不会真正执行截图,真正的截图函数是captureScreen()。
- 该函数在截图脚本中只需执行一次,而无需每次调用captureScreen()都调用一次。
- @param timeout 超时时间,单位是毫秒
- @param type 截屏的类型,0 自动选择,1 代表授权模式,2 代表无需权限模式(该模式前提条件:运行模式为代理模式)
- @return true 代表成功 false代表失败
function main() {
var request = image.requestScreenCapture(10000,0);
if (request){
toast("申请成功");
}else {
toast("申请失败");
}
}
main();
2.2. image.releaseScreenCapture
function main() {
image.releaseScreenCapture();
}
main();
3. 截图
3.1. image.captureScreen
- 截取当前屏幕并返回一个Image对象。
- 没有截图权限时执行该函数会返回null
- 两次调用可能返回相同的Image对象。这是因为设备截图的更新需要一定的时间,短时间内(一般来说是16ms)连续调用则会返回同一张截图。
- 截图需要转换为Bitmap格式,从而该函数执行需要一定的时间(0~20ms)。
- 另外在requestScreenCapture()执行成功后需要一定时间后才有截图可用,因此如果立即调用captureScreen(),会等待一定时间后(一般为几百ms)才返回截图。
- 如果区域空或则有负数的,就会是全屏
- @param retryNumber 重试次数,直到能截到图为止,默认是3
- @param x 截图的起始X坐标
- @param y 截图的起始Y坐标
- @param w 截图的宽度,从X坐标算起
- @param h 截图的高度,从Y坐标算起
- @return AutoImage对象或者null
function main() {
var image = image.captureScreen(3,0,0,300,400);
if (image!=null){
toast("截图成功");
} else {
toast("截图失败");
}
}
main();
3.2. image.captureFullScreen
- 截取当前屏幕并返回一个Image对象。
- @return AutoImage对象或者null
function main() {
var image = image.captureFullScreen();
if (image!=null){
toast("截图成功");
} else {
toast("截图失败");
}
}
main();
3.3. image.captureScreenBitmap
- 将屏幕抓取为Bitmap对象,如果中间有-1或者宽度、宽度为-1,将会是全屏
- @param format jpg或者png,代理模式下有用
- @param x 开始X坐标
- @param y 开始Y坐标
- @param w 宽度
- @param h 高度
- @param q 图片质量,1 - 100,越高越好,代理模式下有用
- @return Bitmap null或者bitmap对象
function main() {
var b = image.captureScreenBitmap("jpg",800,800,100,100,100);
if (b!=null){
toast("截图成功");
} else {
toast("截图失败");
}
}
main();
3.4. image.captureToFile
- 截取当前屏幕并以PNG格式保存到path中。如果文件不存在会被创建;文件存在会被覆盖。
- 如果区域空或则有负数的,就会是全屏
- @param retryNumber 重试次数,直到能截到图为止,默认是3
- @param x 截图的起始X坐标
- @param y 截图的起始Y坐标
- @param w 截图的宽度,从X坐标算起
- @param h 截图的高度,从Y坐标算起
- @param path 截图保存路径
- @return true 截图成功 false 代表不成功
function main() {
var cap = image.captureToFile(3,0,0,300,400,"/sdcard/a.png");
if (cap){
toast("截图成功");
}else {
toast("截图失败");
}
}
main();
4. 找色
4.1. image.findColor
- 在图片中找到颜色和color完全相等的某个点,并返回该点的左边;如果没有找到,则返回null。
- @param image 图片
- @param color 要寻找的颜色
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param x 区域的X起始坐标
- @param y 区域的Y起始坐标
- @param w 区域的宽度
- @param h 区域的高度
- @param limit 限制个数
- @return 多个Point 坐标点数组或者null
function main() {
var req = image.requestScreenCapture(10000,0);
if (!req) {
req = image.requestScreenCapture(10000,0);
}
if (!req) {
toast("申请权限失败");
return;
}
var aimage = image.captureFullScreen();
if (aimage != null) {
var points = image.findColor(aimage,"0xCDD7E9-0x101010", 0.9, 0, 0, 0, 0, 10);
logd("points "+points);
}
}
main();
4.2. image.findColorJ
- 在图片中找到颜色和color完全相等的点,参数从JSON中获取如果没有找到,则返回null。
- @param image 图片
- @param jsonFileName res文件中取色工具生成的JSON文件,只要填写文件名称即可,后缀不用填写
- @return 多个Point 坐标点数组或者null
function main() {
var req = image.requestScreenCapture(10000,0);
if (!req) {
req = image.requestScreenCapture(10000,0);
}
if (!req) {
toast("申请权限失败");
return;
}
var aimage = image.captureFullScreen();
if (aimage != null) {
var points = image.findColorJ(aimage,"金币");
logd("points "+points);
}
}
main();
4.3. image.findColorEx
- 在当前屏幕中找到颜色和color完全相等的点,并返回该点的左边;如果没有找到,则返回null。
- @param color 要寻找的颜色
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param x 区域的X起始坐标
- @param y 区域的Y起始坐标
- @param w 区域的宽度
- @param h 区域的高度
- @param limit 限制个数
- @return 多个Point 坐标点数组或者null
function main() {
var req = image.requestScreenCapture(10000,0);
if (!req) {
req = image.requestScreenCapture(10000,0);
}
if (!req) {
toast("申请权限失败");
return;
}
var points = image.findColorEx("0xCDD7E9-0x101010", 0.9, 0, 0, 0, 0, 10);
logd("points "+points);
}
main();
4.4. image.findColorExJ
- 当前屏幕中找到颜色和color完全相等的点,参数从JSON中获取如果没有找到,则返回null。
- @param jsonFileName res文件中取色工具生成的JSON文件,只要填写文件名称即可,后缀不用填写
- @return 多个Point 坐标点数组或者null
function main() {
var req = image.requestScreenCapture(10000,0);
if (!req) {
req = image.requestScreenCapture(10000,0);
}
if (!req) {
toast("申请权限失败");
return;
}
var points = image.findColorExJ("金币");
logd("points "+points);
}
main();
4.5. image.findMultiColor
- 多点找色,找到所有符合标准的点,类似于按键精灵的多点找色。
- @param image 要找色的图片
- @param firstColor 第一个点的颜色
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param points 字符串类似这样 6|1|0x969696-0x000010,1|12|0x969696,-4|0|0x969696
- @param x 区域的X起始坐标
- @param y 区域的Y起始坐标
- @param w 区域的宽度
- @param h 区域的高度
- @param limit 限制个数
- @return 多个Point 坐标点数组或者null
function main() {
var req = image.requestScreenCapture(10000,0);
if (!req) {
req = image.requestScreenCapture(10000,0);
}
if (!req) {
toast("申请权限失败");
return;
}
var aimage = image.captureFullScreen();
if (aimage != null) {
var points = image.findMultiColor(aimage,"0xDD7A5F-0x101010", "29|25|0xBB454B-0x101010,58|44|0xA6363A-0x101010", 0.9, 0, 0, 0, 0, 10);
logd("points "+points);
}
}
main();
4.6. image.findMultiColorJ
- 多点找色,找到所有符合标准的点,参数从JSON文件中读取,类似于按键精灵的多点找色
- @param image 要找色的图片
- @param jsonFileName res文件中取色工具生成的JSON文件,只要填写文件名称即可,后缀不用填写
- @return 多个Point 坐标点数组或者null
function main() {
var req = image.requestScreenCapture(10000,0);
if (!req) {
req = image.requestScreenCapture(10000,0);
}
if (!req) {
toast("申请权限失败");
return;
}
var aimage = image.captureFullScreen();
if (aimage != null) {
var points = image.findMultiColorJ(aimage,"金币");
logd("points "+points);
}
}
main();
4.7. image.findMultiColorEx
- 多点找色,找到所有符合标准的点,类似于按键精灵的多点找色。
- @param firstColor 第一个点的颜色
- @param threshold 找色时颜色相似度取值为 0.0 ~ 1.0
- @param points 字符串类似这样 6|1|0x969696-0x000010,1|12|0x969696,-4|0|0x969696
- @param x 区域的X起始坐标
- @param y 区域的Y起始坐标
- @param w 区域的宽度
- @param h 区域的高度
- @param limit 限制个数
- @return 多个Point 坐标点数组或者null
function main() {
var req = image.requestScreenCapture(10000,0);
if (!req) {
req = image.requestScreenCapture(10000,0);
}
if (!req) {
toast("申请权限失败");
return;
}
var points = image.findMultiColorEx("0xDD7A5F-0x101010", "29|25|0xBB454B-0x101010,58|44|0xA6363A-0x101010", 0.9, 0, 0, 0, 0, 10);
logd("points "+points);
}
main();
4.8. image.findMultiColorExJ
- 多点找色,找到所有符合标准的点,自动抓取当前屏幕的图片,参数从JSON文件中读取,类似于按键精灵的多点找色
- @param jsonFileName res文件中取色工具生成的JSON文件,只要填写文件名称即可,后缀不用填写
- @return 多个Point 坐标点数组或者null
function main() {
var req = image.requestScreenCapture(10000,0);
if (!req) {
req = image.requestScreenCapture(10000,0);
}
if (!req) {
toast("申请权限失败");
return;
}
var points = image.findMultiColorExJ("金币");
logd("points "+points);
}
main();
5. 找图
5.1. image.findImage
- 找图。在大图片image中查找小图片template的位置(模块匹配),找到时返回位置坐标区域(Rect),找不到时返回null。
- @param image 大图片
- @param template 小图片(模板)
- @param x 找图区域 x 起始坐标
- @param y 找图区域 y 起始坐标
- @param w 找图区域 w 宽度
- @param h 找图区域 h 高度
- @param threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。
- @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个
- @return Rect 区域坐标对象或者null
function main() {
var request = image.requestScreenCapture(10000,0);
if (request){
toast("申请成功");
}else {
toast("申请失败");
exit();
}
sleep(5000);
var sms=readResAutoImage("sms.png");
var point = image.findImageEx( sms, 1);
logd("point "+point);
var aimage = image.captureFullScreen();
logd("aimage "+aimage);
if (aimage != null) {
point = image.findImage(aimage, sms,0,0,0,0,1, 1);
logd("point "+point);
}
}
main();
5.2. image.findImageEx
- 找图。在当前屏幕中查找小图片template的位置(模块匹配),找到时返回位置坐标区域(Rect),找不到时返回null。
- @param template 小图片(模板)
- @param x 找图区域 x 起始坐标
- @param y 找图区域 y 起始坐标
- @param w 找图区域 w 宽度
- @param h 找图区域 h 高度
- @param threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。
- @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个
- @return Rect 区域坐标对象数组或者null
function main() {
var request = image.requestScreenCapture(10000,0);
if (request){
toast("申请成功");
}else {
toast("申请失败");
exit();
}
sleep(5000);
var sms=readResAutoImage("sms.png");
var point = image.findImageEx(sms,0,0,0,0,1, 1);
logd("point "+point);
}
main();
5.3. image.matchTemplate 模板匹配
- OpenCV模板匹配封装
- @param image 大图片
- @param template 小图片(模板)
- @param weakThreshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。
- @param threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。
- @param rect 找图区域。参见findColor函数关于 rect 的说明。
- @param maxLevel 默认为-1,一般而言不必修改此参数。不加此参数时该参数会根据图片大小自动调整。找图算法是采用图像金字塔进行的, level参数表示金字塔的层次,
level越大可能带来越高的找图效率,但也可能造成找图失败(图片因过度缩小而无法分辨)或返回错误位置。因此,除非您清楚该参数的意义并需要进行性能调优,否则不需要用到该参数。
- @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个
- @return Match集合 或者null
function main() {
var req = image.requestScreenCapture(10000,0);
if (!req) {
req = image.requestScreenCapture(10000,0);
}
if (!req) {
toast("申请权限失败");
return;
}
var aimage = image.captureFullScreen();
if (aimage != null) {
var temp = readResAutoImage("tmp.png");
var rectp= new Rect();
rectp.left=10;
rectp.top=100;
rectp.right=100;
rectp.bottom=400;
var x = image.matchTemplate(aimage, temp,0.9,0.9,rectp,-1,1);
logd(x);
}
}
main();
5.4. image.matchTemplateEx 模板匹配
- OpenCV模板匹配封装,在当前屏幕截图中进行匹配
- @param template 小图片(模板)
- @param weakThreshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。
- @param threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。
- @param rect 找图区域。参见findColor函数关于 rect 的说明。
- @param maxLevel 默认为-1,一般而言不必修改此参数。不加此参数时该参数会根据图片大小自动调整。找图算法是采用图像金字塔进行的, level参数表示金字塔的层次,
level越大可能带来越高的找图效率,但也可能造成找图失败(图片因过度缩小而无法分辨)或返回错误位置。因此,除非您清楚该参数的意义并需要进行性能调优,否则不需要用到该参数。
- @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个
- @return Match集合 或者null
function main() {
var req = image.requestScreenCapture(10000,0);
if (!req) {
req = image.requestScreenCapture(10000,0);
}
if (!req) {
toast("申请权限失败");
return;
}
var aimage = image.captureFullScreen();
if (aimage != null) {
var temp = readResAutoImage("tmp.png");
var rectp= new Rect();
rectp.left=10;
rectp.top=100;
rectp.right=100;
rectp.bottom=400;
var x = image.matchTemplateEx( temp,0.9,0.9,rectp,-1,1);
logd(x);
}
}
main();
6. 其他
6.1. image.readImage
- 读取在路径path的图片文件并返回一个{@link AutoImage}对象。如果文件不存在或者文件无法解码则返回null。
- @param path 图片路径
- @return AutoImage 对象或者null
function main() {
var autoimg = image.readImage("/sdcard/a.png");
}
main();
6.2. image.readBitmap
- 读取在路径path的图片文件并返回一个{@link AutoImage}对象。如果文件不存在或者文件无法解码则返回null。
- @param path 图片路径
- @return android的bitmap对象或者null
function main() {
var autoimg = image.readBitmap("/sdcard/a.png");
}
main();
6.3. image.pixelInImage
- 返回图片image在点(x, y)处的像素的ARGB值。
- 该值的格式为0xAARRGGBB,是一个"32位整数"
- 坐标系以图片左上角为原点。以图片左侧边为y轴,上侧边为x轴。
- @param image 图片
- @param x 要获取的像素的横坐标。
- @param y 要获取的像素的纵坐标。
- @return 整型
function main() {
var imageX = image.captureFullScreen();
var color = image.pixelInImage(imageX,100,100);
}
main();
6.4. image.getPixelBitmap
- 取得Bitmap图片的某个点的颜色值
- @param bitmap 图片对象
- @param x x坐标点
- @param y y坐标点
- @return int 颜色值
function main() {
var bitmap = image.captureScreenBitmap("jpg",800,800,100,100,100);
var color = image.getPixelBitmap(bitmap,100,100);
}
main();
6.5. image.getPixelsBitmap
- 取得Bitmap图片的某个区域点的颜色值,等同于 Bitmap.getPixels
- @param bitmap 图片对象
- @param arraySize 要返回的区域数组的大小
- @param offset 写入到pixels[]中的第一个像素索引值
- @param stride pixels[]中的行间距个数值(必须大于等于位图宽度)。可以为负数
- @param x 从位图中读取的第一个像素的x坐标值。
- @param y 从位图中读取的第一个像素的y坐标值
- @param width 从每一行中读取的像素宽度
- @param height 读取的行数
- @return int 颜色值数组
function main() {
var bitmap = image.captureScreenBitmap("jpg",800,800,100,100,100);
var w = bitmap.getWidth();
var h =bitmap.getHeight();
var mPixels = image.getPixelsBitmap(bitmap,w*h, 0, w, 0, 0,w, h);
}
main();
7. 图片转换
7.1. image.saveTo
- 保存到文件中
- @param img 图片对象
- @param path 路径
- @return bool true代表成功,false 代表失败
function main() {
var imageX = image.captureFullScreen();
var r = image.saveTo(imageX,"/sdard/a.png");
toast("result "+r);
}
main();
7.2. image.toBase64
- 转成base64的字符串
- @param img 图片对象
- @return string
function main() {
var imageX = image.captureFullScreen();
var r = image.toBase64(imageX);
toast("result "+r);
}
main();
7.3. image.clip
- 剪切图片
- @param img 图片对象
- @param x x起始坐标
- @param y y起始坐标
- @param w 宽度
- @param h 高度
- @return AutoImage 对象或者null
function main() {
var imageX = image.captureFullScreen();
var r = image.clip(imageX,100,100,300,400);
toast("result "+r);
}
main();
7.4. image.pixel
- 取得图片的某个点的颜色值
- @param img 图片对象
- @param x x坐标点
- @param y y坐标点
- @return int 颜色值
function main() {
var imageX = image.captureFullScreen();
var r = image.pixel(imageX,100,100);
toast("result "+r);
}
main();
7.5. image.isRecycled
- 是否被回收了
- @param img 图片对象
- @return bool true代表已经被回收了
function main() {
var imageX = image.captureFullScreen();
var r = image.isRecycled(imageX);
toast("result "+r);
}
main();
7.6. image.recycle
function main() {
var imageX = image.captureFullScreen();
image.recycle(imageX);
}
main();