En este grupo En todos

Foro de Java



Extraer los canales RGB de una imagen

Escrito por Javig33
el 12/07/2008

Hola, necesito extraer los canales RGB de una imagen. He construido un método que le paso un tipo Image y me devuelve un BufferedImage:

 BufferedImage toBufferedImage(Image image) {
        /** miramos que la imagen no sea ya una instancia de BufferedImage */
       if( image instanceof BufferedImage ) {
                return( (BufferedImage)image );
        } else {
                /** nos aseguramos que la imagen está totalmente cargada */
                image = new ImageIcon(image). GetImage();
                /** creamos la nueva imagen */
               BufferedImage bufferedImage = new BufferedImage(
                                                      image. GetWidth(null),
                                                      image. GetHeight(null),
                                                      BufferedImage. TYPE_INT_RGB );
               
                                                    
               Graphics g = bufferedImage. CreateGraphics();
               g. DrawImage(image,0,0,null);
               g. Dispose();
               return( bufferedImage );
        }

Después recorro ese BufferedImage y extraido el color de los pixeles:

Int [][]matrizLocal=new int[bufferedimage. GetWidth()][bufferedimage. GetHeight()];
        for(int i=0;i<bufferedimage. GetWidth();i++){
           for(int j=0;j<bufferedimage. GetHeight();j++){
               
      
                int G= bufferedimage. GetColorModel(). GetRGBdefault(). GetGreen(bufferedimage. GetRGB(i,j));
                bufferedimage. SetRGB(i,j,G);                               
           }
          
        }
          
        
        
 Image miImagen = Toolkit. GetDefaultToolkit(). CreateImage(bufferedimage. GetSource());      
               
             return miImagen;
      
    
    }

Extraiga el rojo, el verde o el azul, siempre que visualizo la imagen me sale en azul, más oscuro o más claro, pero en azul, ¿A qué se puede deber esto? ¿Me recomienda otra forma de hacerlo? Gracias: