看下面的代码:
image.getRGB(x,y) & 0x000000FF
当结果image.getRGB(x,y)为-16777216时,AND运算结果为0(黑颜色)
当结果image.getRGB(x,y)为-1时,AND运算结果为255(白色)
我的问题是,如果您查看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
他们如何在0x00000FF的8位和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