Ajuda para pegar partes da imagem

3 respostas
dedspr

Olá pessoal…

Estou pegando o print screen da tela e quero captura-lo por partes…
porém quando coloco para ele pegar em outra posição não funciona, estou utilizando o seguinte código

Image image;
BufferedImage BI=null; 
BufferedImage BIR=null;  

private void getImage() {
    try {
        this.BI = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );
        this.image = (Image)this.BI;

        int W=image.getWidth(this);
        int H=image.getHeight(this);

        Rectangle rect=new Rectangle(0,0,200,200); //ASSIM DA CERTO
        //Rectangle rect=new Rectangle(10,10,200,200); //ASSIM DA ERRO

        Raster R = BI.getData(rect);

        BufferedImage BIR = new BufferedImage(BI.getColorModel(),(WritableRaster)R,false,null);

        jLabel1.setIcon( new ImageIcon(BIR));

    } catch (Exception erro) {
        System.err.println("Erro: "+erro.getMessage());
    }
}

O erro que acontece é esse

Erro: Raster IntegerInterleavedRaster: width = 200 height = 200 #Bands = 3 xOff = 0 yOff = 5 dataOffset[0] 0 has minX or minY not equal to zero: 0 5

Alguém tem idéia de como posso resolver este erro…

3 Respostas

dstori

Amigo, tenta utilizar diretamente o método getSubimage do BufferedImage

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/image/BufferedImage.html#getSubimage(int,%20int,%20int,%20int)

dedspr

Grande dstori…

Valeu pela dica, funcionou perfeitamente…
Isso que da num lê os docs… hehehehehehe

Valeu brigadão…

sergio_ferraz

Como respondido, basta usar o método getSubImage() do BufferedImage, dessa forma:

private void getImage() {  
			   Image image;  
			   BufferedImage BI=null;    
			   try {  
				   this.BI = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()) );  
				   this.image = (Image)this.BI.getSubimage(30, 30, 200, 200);  
				   JLabel jLabel1 = new JLabel();
				   jLabel1.setIcon( new ImageIcon(image));  
				   JFrame frame = new JFrame("Teste");
				   frame.add(jLabel1);
				   frame.show();
			   } catch (Exception erro) {  
				   System.err.println("Erro: "+erro.getMessage());  
			   }  
		   }
Criado 16 de setembro de 2008
Ultima resposta 16 de set. de 2008
Respostas 3
Participantes 3