images.pixel函数可能有点问题
images.pixel(binaryImg,x, y); 或者我改成binaryImg.pixel(x, y); 都报了同样的异常: 方法 images.pixel 调用失败. Index 1 out of bounds for length 1 (/data/user/0/org.autojs.autojs6/cache/tmp-scripts/tmp-1743492325949.js#22)
然而,x=0,y=0 长度怎么会越出边界?
甚至我硬编码手动把值改成x=1,y=1也是报一样的错误
我发现,将图片保存本地后,重新读取图片。 用读取的那个对象来操作,就没问题了。 不过这无疑增加了io
然后 .pixel读出来的值,全是负值。 怎么办呢? 哎~浮生多艰啊,好难
下一版本将尝试修复上述问题.
出现上述数组越界的原因, 代码位置等信息, 可参照截图中的代码及注释内容:
另外你提到了 pixel 返回的是负值.
首先如果希望返回的结果方便阅读, 如 "#FFDEAD" 这样的形式, 可使用 colors.toHex/colors.summary() 等方法.
下面解释为什么 pixel 返回值为负值.
方法 colors.pixel 返回的颜色值, 默认使用 Android 的 ColorInt 表示, 它是一个用 32 位整数表示的颜色值, 格式为 ARGB, 每 8 位表示一个颜色分量, 范围 0x00000000 - 0xFFFFFFFF.
然而在 Java 中, 整型 (int) 是有符号的, 当最高位 (表示 Alpha 的高位) 为 1 时, 整数被解释为负数.
例如对于颜色 0xFF0000FF (纯蓝色, Alpha 为 0xFF), 其二进制最高位为 1, 所以转换为十进制时会显示为负值.
在原始开源版本的 Auto.js 中如果涉及到将颜色作为参数的情况, 通常也是需要传入 ColorInt 的, 尤其是直接使用 Java/Android 与颜色相关的代码时.
如有其他相关问题, 可继续反馈.
可是,我是二值化的图片,colors.pixel的返回值不是应该0和255吗?
0 与 255 是颜色分量值, 不能作为最终颜色值, 因为颜色值 (ARGB) 的范围是 0x00000000 至 0xFFFFFFFF.
如果你将 0 和 255 作为颜色值使用, 它们分别表示 0x00000000 与 0x000000FF. 一个是完全透明的纯黑色, 一个是完全透明的纯蓝色.
如果你希望表示一个单通道黑色, 他应该是 0xFF000000, 转换为 ColorInt 是 -16777216; 如果希望表示一个单通道白色, 他应该是 0xFFFFFFFF, 转换为 ColorInt 是-1.
因此对于二值化图片, colors.pixel 将固定返回两个值, -16777216 与 -1. 它们均属于 Android 的 ColorInt 颜色值.
Sent from my XQ-DQ72 using FastHub
6.6.2 版本 colors.pixel 可以接受单通道图像作为参数了.
它会固定返回 -16777216 与 -1 两个 ColorInt 值, 分别代表纯黑色与纯白色.