Problemas para conseguir o valor RGB de um pixel

Ola
Meu problema é o seguinte tenho uma imagem (screnshot do desktop) armazenada em uma variavel do tipo BufferedImage, preciso obter o valor RGB de cada pixel da imagem e passar para uma matriz de inteiros, pra ficar mais fácil de realizar operações matematicas.
Tentei usar o metodo "getRGB(x,y), contudo ele esta me devolvendo valores negativos. o código que usei esta abaixo.


Robot robot = new Robot();  
BufferedImage imagem = robot.createScreenCapture(screenRect);  
int rgb = imagem.getRGB(10, 10);  
System.out.println(rgb);  

Caso alguem possa me diser se os valores são negativos mesmo, ou se é necessaria alguma adequação deles, ou mesmo outro modo de conseguir montar a matriz dos valores RGB, agradeço, to travado nessa parte :frowning:

desde já agradeço

rodrigo gonzato

Olá, rodrigo gonzato

Veja se resolve seu problema esse trecho abaixo:

Robot robot = new Robot();  
BufferedImage bufferedImage = robot.createScreenCapture(screenRect);  
WritableRaster raster = bufferedImage.getRaster();
        int[] arrayPixel = new int[3];

        for (int i = 0; i < bufferedImage.getWidth(); i++) {
            for (int j = 0; j < bufferedImage.getHeight(); j++) {
               System.out.println("Cor do pixel corrente : "+raster.getPixel(i, j, arrayPixel));               
                
            }
        }
    }

[]'s

O Javadoc diz:

A = Alpha
R = Red, G = Green, B = Blue

Alpha é 255 (0xFF) se não houver transparência, e 0 se for totalmente transparente. Se os ints que você estiver pegando, passados para hexadecimal, começarem por FF, então é coisa do tal Alpha.

Para ver isso, veja o que é impresso para a cor verde (0x00FF00):

int x = ....getRGB (...);
System.out.println (Long.toString (x & 0xFFFFFFFFL, 16));

heber testei seu codigo e tive a seguinte saida:

init:
deps-jar:
compile:
run:
Aguardando 2 segundo(s)?
Cor do pixel corrente : [I@89ae9e Cor do pixel corrente : [I@89ae9e Cor do pixel corrente : [I@89ae9e . . . Já é um começo obrigado =]
agora é conseguir transformar isso em uma trinca RGB para poder manipular
\o

fiz umas modificações no codigo do Hebert


import java.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *  @author Ragonzato
 */
public class Screenshot {

    private static int[] rgbArray;
    private static int startY;
    private static int scansize;
    private static int offset;
    private static int startX;

    public static void main(String[] args) {
        try {

            // Determina a resolução da imagem
            Toolkit toolkit = Toolkit.getDefaultToolkit();
            Dimension screenSize = toolkit.getScreenSize();
            Rectangle screenRect = new Rectangle(screenSize);

            // Cria o screenshot
            Robot robot = new Robot();
            BufferedImage bufferedImage = robot.createScreenCapture(screenRect);
            WritableRaster raster = bufferedImage.getRaster();
            int[] arrayPixel = new int[3];

            for (int i = 0; i < bufferedImage.getWidth(); i++) {
                for (int j = 0; j < bufferedImage.getHeight(); j++) {
                    System.out.print("R : " + raster.getPixel(i, j, arrayPixel)[0] + " | ");
                    System.out.print("G : " + raster.getPixel(i, j, arrayPixel)[1] + " | ");
                    System.out.println("B : " + raster.getPixel(i, j, arrayPixel)[2]);
                }
            }
        } catch (AWTException ex) {
            Logger.getLogger(Screenshot.class.getName()).log(Level.SEVERE, null, ex);
        }

     }
}

Agora é verificar se esses valores RGB estão corretos, acho que vou abri a imagem de entrada em um editor hexa e comparar os valores, porém se alguem tiver uma sugestão mais fácil agradeço =]

[]'s

Rodrigo Gonzato