Recortar imagem circularmente

5 respostas
G

Estou tentando fazer um mapa circular para um jogo , então queria cortar uma imagem circularmente pra pintar na tela.
como poderia fazer isso!?


5 Respostas

D

Você quer saber como faz isso em Java2D, opengl ou só na imagem mesmo?

G

java2d

D

Acho que você pode tentar dar um clip normal.

private Ellipse2D ellipse = new Ellipse2D.Float(); ellipse.setFrame(x, y, ew, eh); g2.setClip(ellipse); // ou g2.clip(ellipse)
já tentou isso?

V
Segue um exemplo, o método createClipped faz a mágica acontecer:
package br.com.guj;

import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Snippet {
	private static BufferedImage createClipped(BufferedImage input) {
		
		int t = Math.min(input.getWidth(), input.getHeight());
		BufferedImage other = new BufferedImage(t, t, input.TYPE_INT_ARGB);
		
		//Obtém o contexto gráfico
		Graphics2D g2d = other.createGraphics();		
		//Define a área de pintura para um círculo		
		g2d.setClip(new Ellipse2D.Double(0, 0, t, t));
		//Desenha a imagem
		g2d.drawImage(input, 0, 0, null);		
		//Libera o contexto gráfico
		g2d.dispose();
		
		return other;
	}

	private static File newFile(File file, String detail) {
		return new File(file.getParentFile(), file.getName().substring(0,
				file.getName().indexOf("."))
				+ "-" + detail + ".png");

	}
	
	public static void main(String[] args) throws IOException {
		JFileChooser chooser = new JFileChooser();
		chooser.setDialogTitle("Escolha a imagem");
		chooser.setFileFilter(new FileNameExtensionFilter("Imagens", "jpg", "png", "bmp"));			
		if (chooser.showOpenDialog(null) != JFileChooser.APPROVE_OPTION)
			return;
		
		BufferedImage redonda = createClipped(ImageIO.read(chooser.getSelectedFile()));
		
		ImageIO.write(redonda, "png", newFile(chooser.getSelectedFile(), "redonda"));
	}

}


G

funcionou!
valeu!

Criado 10 de dezembro de 2011
Ultima resposta 11 de dez. de 2011
Respostas 5
Participantes 3