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.
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
Robotrobot=newRobot();BufferedImagebufferedImage=robot.createScreenCapture(screenRect);WritableRasterraster=bufferedImage.getRaster();int[]arrayPixel=newint[3];for(inti=0;i<bufferedImage.getWidth();i++){for(intj=0;j<bufferedImage.getHeight();j++){System.out.println("Cor do pixel corrente : "+raster.getPixel(i,j,arrayPixel));}}}
[]'s
T
thingol
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):
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
R
ragonzato
fiz umas modificações no codigo do Hebert
importjava.*;importjava.awt.*;importjava.awt.image.BufferedImage;importjava.awt.image.WritableRaster;importjava.util.logging.Level;importjava.util.logging.Logger;/** * @author Ragonzato */publicclassScreenshot{privatestaticint[]rgbArray;privatestaticintstartY;privatestaticintscansize;privatestaticintoffset;privatestaticintstartX;publicstaticvoidmain(String[]args){try{// Determina a resolução da imagemToolkittoolkit=Toolkit.getDefaultToolkit();DimensionscreenSize=toolkit.getScreenSize();RectanglescreenRect=newRectangle(screenSize);// Cria o screenshotRobotrobot=newRobot();BufferedImagebufferedImage=robot.createScreenCapture(screenRect);WritableRasterraster=bufferedImage.getRaster();int[]arrayPixel=newint[3];for(inti=0;i<bufferedImage.getWidth();i++){for(intj=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(AWTExceptionex){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 =]