Olá,
Eu estou tentando escrever um código para girar (rotacionar) uma imagem e logo depois ampliá-la. Consultei alguns tutoriais e o código que escrevi está abaixo. Mas o código não está funcionando porque a imagem girada não está sendo posicionada no centro da figura - quando o angulo de girar é de 90 ou 270 graus, a imagem fica deslocada. Quando o ângulo é de 180 graus, a imagem fica correta. Já experimentei várias possibilidades, e procurei na Web, mas os tutoriais que encontrei não dão muitas explicações sobre rotate() e scale().
Alguém poderia me ajudar?
Obrigado,
Hel_all
public void processarImagem() {
if (semAlteracao)
imagemMostrada = imagemOriginal;
else {
//fator de zoom - o zoom eh um valor inteiro entre 20 e 150
double fator = zoom.getValor() / 100.0;
//novas dimensoes da imagem
int width = imagemOriginal.getImage().getWidth(null);
int heigth = imagemOriginal.getImage().getHeight(null);
int novoWidth = (int) (width * fator);
int novoHeigth = (int) (heigth * fator);
//rotacionar pode assumir os valores 0, 90, 180 ou 270
if (rotacionar.getValor() == 90 || rotacionar.getValor() == 270) {
int temp = novoWidth;
novoWidth = novoHeigth;
novoHeigth = temp;
}
//imagem para cópia
BufferedImage img = new BufferedImage(novoWidth, novoHeigth,
BufferedImage.TYPE_INT_RGB);
//grafico para imagem
Graphics2D g = img.createGraphics();
//configuracoes do grafico
g.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
//tranformacoes do grafico
AffineTransform af = null;
if (rotacionar.getValor() != 0) {
if (af == null)
af = new AffineTransform();
af.rotate(Math.toRadians(rotacionar.getValor()),
img.getWidth()/2, img.getHeight()/2);
}
if (zoom.getValor() != 100) {
if (af == null)
af = new AffineTransform();
af.scale(fator, fator);
}
//imprime a imagem
if (!g.drawImage(imagemOriginal.getImage(), af, null))
JOptionPane.showMessageDialog(null, "Imagem não foi convertida corretamente!");
//fecha o grafico
g.dispose();
//guarda o resultado
imagemMostrada = new ImageIcon(img);
}
}