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
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));
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
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 =]