[Resolvido]Recortar poligono de BufferedImage?

4 respostas
homisinho

Digamos que eu tenha duas imagens e queira fazer o seguinte:

Recortar um polígono de uma imagem e colar esse polígono sobre a outra imagem com um alpha alterado.

Procurei utilizar BufferedImage e criar os Graphics dos mesmos para poder desenhar nas imagens, mas n encontrei nada, somente tem um método fillPolygon que serve para criar um polígono mas não para recortar um de uma imagem.

Alguém tem alguma sugestão de como fazer isso?

Desde já obrigado.

4 Respostas

ViniGodoy

Use o método setClip, da classe Graphics.

public void clip(Shape s, BufferedImage origem, BufferedImage destino) {
   int w = s.getBounds().width;
   int h = s.getBounds().height;
   Graphics2D g2d = destino.createGraphics();
   g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
   g2d.translate(-r.x, -r.y);
   g2d.setClip(s);
   g2d.drawImage(image, 0, 0, null);
   g2d.dispose();
}
homisinho

Quanto a recortar funcionou bem mas como eu seto o alpha somente dessa parte da imagem?
Pois na realidade eu quero que o meu poligono fique meio transparente pois quero visualizar a imagem de fundo.

//carrega imagem de fundo
                    BufferedImage imagefundo = new BufferedImage(larguraV, alturaV, BufferedImage.TYPE_INT_ARGB);
                    Graphics carregafundo = imagefundo.getGraphics();
                    Image img = new ImageIcon(getClass().getResource("Tfundo.png")).getImage();
                    carregafundo.drawImage(img, 0, 0, lblvertical);

                    //aqui vou gerar o meu poligono...vai mudar de acordo com a necessidade do usuario

                    //aqui entao o teste do clip
                    BufferedImage imagetransparente = new BufferedImage(larguraV, alturaV, BufferedImage.TYPE_INT_ARGB);
                    Graphics2D g2d = (Graphics2D) imagetransparente .createGraphics();
                    Image imgfrente= new ImageIcon(getClass().getResource("imagem.png")).getImage();
                    g2d.drawImage(imgfrente, 0, 0, null);
                    carregafundo.setClip(new Polygon(new int[]{0,0,395}, new int[]{0,200,220}, 3));
                    carregafundo.drawImage(imagetransparente, 0, 0, lblvertical);
  • O poligono vai variar;
  • A imagem de fundo deve continuar aparecendo (Aplicar alpha no poligono recortado);

Não sei se expliquei o meu problema claramente?

Desde já obrigado.

ViniGodoy

Você deve trocar o Composite da imagem transparente:

g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha) );

Onde alpha é um float de 0 (totalmente transparente) até 1 (totalmente opaco).

Um bom material para aprender truques com o BufferedImage é esse aqui:

homisinho

Vou criar meus metodos e implementar as novas funcionalidades.

Obrigado ViniGodoy, funcionou blz.

Criado 16 de setembro de 2009
Ultima resposta 16 de set. de 2009
Respostas 4
Participantes 2