quinta-feira, 13 de maio de 2010

Manipulando imagens em Java

Para manipular imagens em Java, existem uma API: a Java Advanced Imaging (JAI). Ela é bem joinha e bem fácil de mexer.

Eu precisei, pra um relatório, dados vários resultados numéricos criar vários gráficos. Todos eles foram criados com o JFreeChart exceto um. O que eu usei JAI é uma figura que precisava ser semelhante ao Input Number Slider (componente do RichFaces), já que o Sun UI Visual não sei o quê do Netbeans não tem um componente parecido.
Pra gerar a figura que representa o slider, eu calculei o tamanho da margem esquerda que o meu slider (o losango cinza) deveria estar e unia esta imagem à imagem base pra gerar coisas no estilo:

Segue a classe teste que eu gerei:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

public class ImageCombiner {
public static void main(String[] args) {
try {
BufferedImage img1 = ImageIO.read(
new File("perfilRiscoImagemBase.jpg"));
BufferedImage img2 = ImageIO.read(new File("pontoImagemBase.jpg"));
BufferedImage ponto = ImageIO.read(new File("ponto.jpg"));
// calculo de onde colocar o ponto
Double valor, posicao;

for (valor = new Double(1); valor <= 4; valor += 1) {
// gerando a figura do ponto
BufferedImage figuraPonto = new BufferedImage(img2.getWidth(),
img2.getHeight(), BufferedImage.TYPE_INT_RGB);

Graphics g1 = figuraPonto.getGraphics();
g1.drawImage(img2, 0, 0, null);
posicao = (((valor - 1) * 532) / 3) + 8;

if (valor < 3) {
posicao += valor;
} else if (valor >= 3 && valor < 4) {
posicao += new Double(2);
}
System.out.println("posicao; " + posicao);

// posicionando o ponto
g1.drawImage(ponto, posicao.intValue(), 0, null);
// gerando a figura final
BufferedImage combined = new BufferedImage(img1.getWidth(),
img1.getHeight(), BufferedImage.TYPE_INT_RGB);

Graphics g = combined.getGraphics();
g.drawImage(img1, 0, 0, null);
g.drawImage(figuraPonto, 0, 0, null);
g.dispose();
String fileName = "resultado" + valor.doubleValue() + ".png";
File file = new File(fileName);
ImageIO.write(combined, "png", file);
}
} catch (Exception w) {
w.printStackTrace();
}
}
}

Nenhum comentário:

Postar um comentário