java - metodos - Obtener RGB de un BufferedImage
imageio java (1)
Obtiene números negativos ya que el valor int que obtiene de uno de los píxeles está compuesto por rojo, verde, azul y alfa. Debe dividir los colores para obtener un valor para cada componente de color.
La forma más sencilla de hacer esto es crear un objeto Color
y usar los getRed
, getGreen
y getBlue
(así como getAlpha
) para obtener los componentes:
public static void main(String... args) throws Exception {
BufferedImage image = ImageIO.read(
new URL("http://upload.wikimedia.org/wikipedia/en/2/24/Lenna.png"));
int w = image.getWidth();
int h = image.getHeight();
int[] dataBuffInt = image.getRGB(0, 0, w, h, null, 0, w);
Color c = new Color(dataBuffInt[100]);
System.out.println(c.getRed()); // = (dataBuffInt[100] >> 16) & 0xFF
System.out.println(c.getGreen()); // = (dataBuffInt[100] >> 8) & 0xFF
System.out.println(c.getBlue()); // = (dataBuffInt[100] >> 0) & 0xFF
System.out.println(c.getAlpha()); // = (dataBuffInt[100] >> 24) & 0xFF
}
Salidas:
173
73
82
255
¿Alguien puede explicar cómo obtener una matriz de valor rgb de un BufferedImage?
Tengo una imagen en escala de grises en un BufferedImage y necesito extraer una matriz de 0 a 255 valores que describen la imagen.
Sé que BufferedImage es correcto porque puedo guardarlo en PNG. Sin embargo, si uso int[] dataBuffInt = ((DataBufferInt) heightMap.getDataBuffer()).getData();
Tengo un montón de grandes números negativos.
He buscado por un tiempo y he visto algunas referencias a cambiar algunos valores ( post ) pero realmente no entiendo lo que dicen.
Básicamente, quiero pasar de un BufferedImage a una matriz de 0 a 255 valores RBG.
No estoy seguro de que me haya explicado correctamente, es necesario pedir más detalles.
Editar:
Gracias @Garbage por la punta. Intenté int [] dataBuffInt = heightMap.getRGB (0, 0, heightMap.getWidth (), heightMap.getHeight (), null, 0, heightMap.getWidth ()); Pero consigue el mismo resultado.
@Greg Kopff El resultado es 2 y se estableció en TYPE_INT_ARGB