看下面的代码:

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

10-07 16:08