studio metodos imagen imageio guardar crear clase java bufferedimage

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