Java examples for 2D Graphics:BufferedImage Rotate
create Rotated Images
//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; } }