看下面的代码:
image.getRGB(x,y) & 0x000000FF
当结果image.getRGB(x,y)为-16777216时,AND运算结果为0(BLACK COLOR)
当结果image.getRGB(x,y)为-1时,AND运算结果为255(WHITE COLOR)
我的问题是,如果您查看我的相关文章Java - Understanding about image.getRGB(x,y) output in Binary term您可以看到 image.getRGB(x,y) 的二进制结果包括 Alpha、Red、Green 和 Blue(32 位),但 0x000000FF 只是 8 位;例如:
image.getRGB : 1111 1111 0000 0000 0000 0000 0000 0000
0x000000FF : 1111 1111
image.getRGB & 0x000000FF : 0000 0000
第二个例子:
image.getRGB : 1111 1111 1111 1111 1111 1111 1111 1111
0x000000FF : 1111 1111
image.getRGB & 0x000000FF : 1111 1111
他们如何将 8 位 0x00000FF 与 32 位 image.getRGB 进行比较,以便获得结果 0 或 255,就像我上面的情况一样?
最佳答案
简单地把它们想象成数字,无论位数是多少,都应该将数字与代表2的相同幂的位对齐在一起,然后进行二进制运算:
im.getRGB : 1111 1111 0000 0000 0000 0000 0000 0000
0x000000FF : 0000 0000 0000 0000 0000 0000 1111 1111
^^^^ ^^^^ ^^^^ ^^^^
im.getRGB & 0xFF: 0000 0000 0000 0000 0000 0000 0000 0000 = 0
与其他示例相同:
im.getRGB : 1111 1111 1111 1111 1111 1111 1111 1111
0x000000FF : 0000 0000 0000 0000 0000 0000 1111 1111
^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^ ^^^^
im.getRGB & 0xFF: 0000 0000 0000 0000 0000 0000 1111 1111 = 255
关于java - image.getRGB(x,y) 的二进制 AND (&) 运算;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36244409/