Recortar imagem circularmente

5 respostas
geovanni

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

dreampeppers99

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

geovanni

java2d

dreampeppers99

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?

ViniGodoy
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"));
	}

}


geovanni

funcionou!
valeu!

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