Boa tarde a todos.
Estou tendo de realizar um tratamento de imagem no qual eu recebo uma imagem e adiciono um circulo na mesma como se fosse um território, porém não estou gostando da minha performance, uma vez que nem posso escolher a largura do meu circulo.
Abaixo segue um exemplo do meu código.
package Exemplo;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class TestDrawingPanel {
public static void main(String args[]) throws IOException {
File arq = new File("C:/teste.jpg");
BufferedImage img = ImageIO.read(arq);
CriarImagemCirculo p = new CriarImagemCirculo();
ImageIO.write(p.drawUnfilledShapes(img,50,25,25,"Super",Color.RED, Color.BLACK), "jpg", new File("imagem.jpg") );
}
}
package Exemplo;
import java.awt.*;
import java.awt.image.BufferedImage;
public class CriarImagemCirculo {
private static Font FONTE = new Font("Monospaced", Font.PLAIN, 14);
public BufferedImage drawUnfilledShapes(BufferedImage img, int tamanho, int posicao_x, int posicao_y, String legenda, Color corCirculo, Color corLegenda) {
Graphics gra = img.createGraphics();
gra.setColor(corCirculo);
gra.drawOval(posicao_x, posicao_y, tamanho, tamanho);
centerText(gra, legenda, (posicao_x + tamanho/2), posicao_y + tamanho,corLegenda);
return img;
}
private void centerText(Graphics g, String texto, int x, int y, Color cor) {
FontMetrics fm = g.getFontMetrics(FONTE);
int text_width = fm.stringWidth(texto);
int text_height = fm.getHeight();
g.setColor(cor);
g.setFont(FONTE);
g.drawString(texto, x - text_width/2, y + text_height/2 + 5);
}
}
Se alguem tiver um ideia melhor eu agradeço.