rotate Image - Java 2D Graphics

Java examples for 2D Graphics:BufferedImage Rotate

Description

rotate Image

Demo Code


//package com.java2s;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;

public class Main {
    private static final Component OBSERVER = new Component() {

        private static final long serialVersionUID = 1L;
    };/* w  ww .  j a v  a 2s  . co m*/

    public static BufferedImage rotateImage(BufferedImage img,
            double degrees) {
        // a imagem rotacionada pode ter uma ?rea quadrada maior que a original
        // por isso criamos uma nova imagem com base no tamanho da hipotenusa
        // do triangulo formado entre o centro da imagem e um dos cantos
        Rectangle bounds = new Rectangle(0, 0, img.getWidth(),
                img.getHeight());
        int a = bounds.width - (int) (bounds.getCenterX() + 0.5);
        int b = bounds.height - (int) (bounds.getCenterY() + 0.5);
        int hypotenusa = (int) (Math.sqrt(a * a + b * b) + 0.5);

        // o tamanho da nova imagem vai ser o dobro da hipotenusa
        // assim n?o haver? corte na imagem original ap?s a rota??o
        final int side = hypotenusa * 2;
        BufferedImage squareImg = new BufferedImage(side, side,
                img.getType());

        // criar objeto de transforma??o da rota??o
        AffineTransform transform = new AffineTransform();
        // rotacionar
        transform.rotate(Math.toRadians(degrees), hypotenusa, hypotenusa);
        // centralizar
        transform.translate((side - bounds.width) / 2.0,
                (side - bounds.height) / 2.0);

        // desenhar a imagem rotacionada
        Graphics2D g = squareImg.createGraphics();
        g.drawImage(img, transform, OBSERVER);
        g.dispose();

        // devolver a nova imagem
        return squareImg;
    }
}

Related Tutorials