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);
}
}