Java 如何使用image.getRGB(x,y)检查像素是否为黑色

Java 如何使用image.getRGB(x,y)检查像素是否为黑色,java,image,bit-manipulation,pixel,Java,Image,Bit Manipulation,Pixel,我应该期望像素的颜色为黑色吗 image.getRGB(x,y)返回0 我的假设:我期望0,因为每个值(红色、绿色、蓝色)的位值都是零。我这样想对吗? 也就是说,填料(在十六进制位置)如下所示,其中每个组件的值可以为0(0x00)。。255(0xFF) 因此,当所有颜色分量为零时,最终值不仅取决于RGB: AA000000 事实上,AA默认为0xFF(“100%不透明”),除非它在支持alpha通道的缓冲区/模型中被显式设置为不同的值。否,BuffereImage#getRGB()返回十六进制

我应该期望像素的颜色为黑色吗

image.getRGB(x,y)
返回0

我的假设:我期望0,因为每个值(红色、绿色、蓝色)的位值都是零。我这样想对吗?

也就是说,填料(在十六进制位置)如下所示,其中每个组件的值可以为0(0x00)。。255(0xFF)

因此,当所有颜色分量为零时,最终值不仅取决于RGB:

AA000000
事实上,AA默认为0xFF(“100%不透明”),除非它在支持alpha通道的缓冲区/模型中被显式设置为不同的值。

否,BuffereImage#getRGB()返回十六进制数。参见本单元测试:

public class TestRgb {
  @Test
  public void testBlack(){
    BufferedImage bufferedImage = new BufferedImage(1,1, TYPE_BYTE_BINARY);
    Graphics2D graphics2D = bufferedImage.createGraphics();
    graphics2D.setPaint(new Color(0,0,0)); //black
    graphics2D.fillRect(0,0,1,1);

    // pass - alpha channel set by default, even on all black pixels
    TestCase.assertTrue(bufferedImage.getRGB(0,0)==0xFF000000);

    // pass - when looking at just the color values (last 24 bits) the value is 0
    TestCase.assertTrue((bufferedImage.getRGB(0,0) & 0x00FFFFFF)==0);

    // fail - see above
    TestCase.assertTrue(bufferedImage.getRGB(0,0)==0);
  }
}

getRGB返回一个“压缩四元组”。如何包装?(这包含在文档中。)这是否支持/回答/与假设(全黑像素将“为0”)冲突?有了这些信息,假设的断言在什么情况下是真/假?等等,alpha不会也影响它吗?@Allan是的,它会:)因此,如果我想检查它是白色的,它会是:(image.getRGB(0,0)&0x00FFFFFF)==125?@Allan否。该位掩码/表达式将“选择所有(且仅)颜色位”对于全白来说是0xFFFFFF:0xFFFFFF==2^24-1~~16.7M,这绝对不是125。
public class TestRgb {
  @Test
  public void testBlack(){
    BufferedImage bufferedImage = new BufferedImage(1,1, TYPE_BYTE_BINARY);
    Graphics2D graphics2D = bufferedImage.createGraphics();
    graphics2D.setPaint(new Color(0,0,0)); //black
    graphics2D.fillRect(0,0,1,1);

    // pass - alpha channel set by default, even on all black pixels
    TestCase.assertTrue(bufferedImage.getRGB(0,0)==0xFF000000);

    // pass - when looking at just the color values (last 24 bits) the value is 0
    TestCase.assertTrue((bufferedImage.getRGB(0,0) & 0x00FFFFFF)==0);

    // fail - see above
    TestCase.assertTrue(bufferedImage.getRGB(0,0)==0);
  }
}