create Rotated Images - Java 2D Graphics

Java examples for 2D Graphics:BufferedImage Rotate

Description

create Rotated Images

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;
    };//from   w w w  . ja va2  s  .c o m

    public static BufferedImage[] createRotatedImages(
            BufferedImage original, double deltaDegrees) {
        int count = (int) (360 / deltaDegrees + 0.5);
        BufferedImage[] frames = new BufferedImage[count];
        for (int i = 0; i < count; i++) {
            frames[i] = rotateImage(original, i * deltaDegrees);
        }
        return frames;
    }

    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