Como acessar os pixels de uma imagem png?

Olá pessoal!

Estou tentando escrever um código para acessar o valor R,G,B dos pixels de uma imagem pnj. Pode ser o valor de qualquer uma das componentes do pixel (R,G,B) pois a imagem será em escala cinza, logo os tres valores serão iguais para cada pixel.

Eu tentei utilizar o código abaixo:

try
{
                   GraphicsEnvironment ge
                    =GraphicsEnvironment.getLocalGraphicsEnvironment();
			
	    GraphicsConfiguration gc = ge.getDefaultScreenDevice()
                    .getDefaultConfiguration();
			
	    BufferedImage image = ImageIO.read(getClass().
                    getResource("Images\\terreno1.png"));
			
	    int transparency = image.getColorModel()
                    .getTransparency();
			
	    BufferedImage copy = gc.createCompatibleImage(image.
                    getWidth(),image.getHeight(), transparency);
			
	    Graphics2D g2d = copy.createGraphics();
			
	    g2d.drawImage(image,0,0,null);
			
	     g2d.dispose();
			
	   for (int iIndex=0; iIndex<copy.getHeight(); iIndex++)
	  {
	         for (int jIndex=0; jIndex<copy.getWidth(); jIndex++)
	         {
		System.out.print(copy.getRGB(iIndex,jIndex)+" ");
	          }
	          System.out.println();
	   }
          }
         catch(Exception e)
         {
	   System.out.println("Erro de leitura");
         }

mas obtive o seguinte resultado:

-12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -10855846 -10855846 -10855846 -10855846 -10855846 -10855846 -10855846 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636
-12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -10197916 -10197916 -10197916 -10197916 -10197916 -10197916 -10197916 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -12829636 -

o que não faz muito sentido para mim, já que eu esperava um valor de 0 a 256. Alguem tem alguma idéia?

Obrigado! Abraços

Olá, isso é porque as 3 componentes da cor (R,G,B) e mais a transparência(Alpha, se tiver) são armazenados em um único int, sendo 8 bits pra cada.

acho que vc pode pegar as componentes assim:

// modelo de cores que representa a paleta de cores, caso a imagem use paleta
ColorModel model = copy.getColorModel();
int pixel = copy.getRGB(...);

//pega as componentes de cor
int vermelho = model.getRed(pixel);
int verde = model.getGreen(pixel);
int azul= model.getBlue(pixel);

if(model.hasAlpha())
    int transparencia = model.getAlpha(pixel);

//ou assim pra pegar todas de uma vez
int cores = new int[4];
model.getComponents(pixel, cores, 0);

não tenho bem certeza, mas acho que é assim

Obrigado…vou tentar. Abraços