2011-03-25 11 views
5

¿Cómo puedo convertir una matriz 2D de entradas en una escala de grises png. en este momento tengo esto:¿Convertir una matriz 2D de int que va de 0-256 a una escala de grises png?

BufferedImage theImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB); 
    for(int y = 0; y<100; y++){ 
     for(int x = 0; x<100; x++){ 
      theImage.setRGB(x, y, image[y][x]); 
     } 
    } 
    File outputfile = new File("saved.bmp"); 
    ImageIO.write(theImage, "png", outputfile); 

pero la imagen se ve azul. ¿Cómo puedo hacer que sea una escala de grises?

imagen [] [] contiene entradas que van desde 0 hasta 256.

+0

No creo que quiere decir PNG, ya que no está ahorrando nada para un archivo de cualquier formato. Parece que estás dibujando en la pantalla. – ArtB

Respuesta

3

La imagen aparece en azul porque setRGB está esperando un valor RGB, solo está configurando el byte bajo, que probablemente sea azul, por lo que sale completamente azul.

Probar:

BufferedImage theImage = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB); 
for(int y = 0; y<100; y++){ 
    for(int x = 0; x<100; x++){ 
     int value = image[y][x] << 16 | image[y][x] << 8 | image[y][x]; 
     theImage.setRGB(x, y, value); 
    } 
} 
+0

sigue siendo azul, de hecho quiero que salga en escala de grises ahora que lo pienso. – wbarksdale

+0

que debería salir como escala de grises ... ¿está seguro de que está configurando el píxel con el nuevo valor y no con el anterior? – yan

+0

Intenta pasar 'BufferedImage.TYPE_BYTE_GRAY' al constructor y usa el código original que tenías para el ciclo interno? – yan

0

Nunca he intentado, pero en realidad debería ser instanciada BufferedImage incluso en modo de escala de grises:

new BufferedImage(100, 100, BufferedImage.TYPE_BYTE_GRAY); 
Cuestiones relacionadas