群里有个新人, 说以下代码报错, 越界了, 看不出来咋回事,
我们来试试
报错的代码如下:
function requestCapture() { threads.start(function () { let beginBtn; if (beginBtn = classNameContains("Button").textContains("立即开始").findOne(2000)) { beginBtn.click(); } }); if (!requestScreenCapture()) { toast("请求截图失败"); return false; } return true; } requestCapture(); for (var i = 0; i < 0; i++) { sleep(1000); log(i); } function main() { let capImg = captureScreen(); let srcImg = images.clip(capImg, 0, 0, 10, 10); for (let m = 0; m < 2; m++) { let grayImg = images.grayscale(srcImg); let thresImg = images.threshold(grayImg, 66, 200); grayImg.recycle(); let width = thresImg.getWidth(); let height = thresImg.getHeight(); for (let i = 1; i < height; i += 3) { for (let j = 1; j < width; j += 3) { let number = images.pixel(thresImg, j, i); let color = colors.toString(number); console.log(color); } } thresImg.recycle(); } srcImg.recycle(); capImg.recycle(); } main();
F5运行后的报错日志
09-13 21:59:36.711 Script-10 Main [remote://tmp.js]/V: 开始运行[remote://tmp.js] 09-13 21:59:36.982 Script-10 Main [remote://tmp.js]/E: Wrapped java.lang.ArrayIndexOutOfBoundsException: length=1; index=3 at main (remote://tmp.js:28:0) at remote://tmp.js:38:0 09-13 21:59:36.982 Script-10 Main [remote://tmp.js]/V: ------------ [remote://tmp.js]运行结束,用时0.269000秒
第28行报错, 内容是
let number = images.pixel(thresImg, j, i);
排查bug过程
一开始怀疑 i, j 有问题, 把代码改为
let number = images.pixel(thresImg, 1, 1);
报错还是一模一样, 那就不是 i, j 的问题了
那就看看thresImg是什么
Image{width=10, height=10, bitmap=[LateInit], mat=Mat [ 10*10*CV_8UC1, isCont=true, isSubmat=false, nativeObj=0xffffffffa7406e00, dataAddr=0xffffffffa1dbaf80 ], mediaImage=null}
看到这个 mat=Mat [ 10*10*CV_8UC1, 恍然大悟
打印截图capImg.getMat()
Mat [ 1920*1080*CV_8UC4, isCont=true, isSubmat=false, nativeObj=0xffffffffa1f1b680, dataAddr=0xffffffff9d340000 ]
可以看到 Mat [ 1920*1080*CV_8UC4
文档说明
images.pixel(image, x, y)返回图片image在点(x, y)处的像素的ARGB值。
argb对应的就是C4, 4个维度
thresImg二值化图只有0-255, 也就是1个维度, 对应的是CV_8UC1里面的C1
到这里就明了了
Wrapped java.lang.ArrayIndexOutOfBoundsException: length=1; index=3
length = 1 对应的是 二值化的1个维度
index = 3 对应的是png图片的4个维度
名人名言
思路是最重要的, 其他的百度, bing, stackoverflow, 安卓文档, autojs文档, 最后才是群里问问
--- 牙叔教程
声明
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途