¿Debo esperar que el color del píxel sea negro si

image.getRGB(x, y) devuelve 0?

Mi suposición: esperaría 0 porque los valores de bit de cada uno de los valores (rojo, verde, azul) serían cero. ¿Estoy en lo correcto al pensar esto?

-1
DevAllanPer 12 nov. 2017 a las 22:46

2 respuestas

La mejor respuesta

No, BufferedImage # getRGB () devuelve un número hexadecimal. Vea esta prueba unitaria:

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);
  }
}
2
user2864740 12 nov. 2017 a las 20:05

"Devuelve el valor RGB que representa el color en el modelo de color sRGB predeterminado. ( Los bits 24-31 son alfa , 16-23 son rojos, 8-15 son verdes, 0-7 son = azules) ".

Es decir, el empaquetado (en ubicaciones hexadecimales) es el siguiente, donde cada componente puede tener un valor de 0 (0x00) .. 255 (0xFF).

AARRGGBB

Por lo tanto, el valor final no solo depende de RGB, cuando todos los componentes de color son cero:

AA000000

De hecho, AA será 0xFF ("100% opaco") por defecto a menos que se haya establecido explícitamente en un valor diferente en un búfer / modelo que admita un canal alfa.

1
user2864740 12 nov. 2017 a las 20:11