【问题标题】:java - Binary AND (&) operation for image.getRGB(x,y);java - image.getRGB(x,y) 的二进制 AND (&) 操作;
【发布时间】:2016-07-14 15:41:34
【问题描述】:

看下面的代码:

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

他们如何比较 0x00000FF 的 8 位和 32 位 image.getRGB 以便得到结果 0 或 255,就像我上面的情况一样?

【问题讨论】:

  • 你确定你没记错。此代码输出:System.out.println(0xFF<<24 & 0xFF); → 0System.out.println(Color.black.getRGB()); → -16777216System.out.println(Color.black.getRGB() & 0xFF); → 0
  • @maljam :抱歉,我的问题已被编辑。您可以在上面再次检查。谢谢
  • -16777216 == 0xFF00000

标签: java image binary rgb


【解决方案1】:

简单地把它们想象成数字,不管位数多少,你应该把数字和代表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

【讨论】:

  • 很好的答案!谢谢!
猜你喜欢
  • 2016-07-14
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
相关资源
最近更新 更多