Originariamente inviato da R@ve M@ster
utilizza le classi BufferedImage e AffineTrasform
Per la rotazione:
codice:
AffineTransform tx = new AffineTransform();
//radians rappresenta i gradi di rotazione che vuoi
tx.rotate(radians , tuaBufferedImage.getWidth()/2, tuaBufferedImage.getHeight()/2);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
tuaBufferedImage = op.filter(tuaBufferedImage, null);
Io ho il problema che un immagine qualsiasi ruotata di ad es. 20° non mantiene gli angoli di 90°. Ottengo cioè un parallelogramma.
Il codice è:
codice:
public BufferedImage rotate(Image i, double deg) {
BufferedImage bufferedImage = ImageUtils.toBufferedImage(i);
AffineTransform tx = new AffineTransform();
tx.rotate(Math.toRadians(deg), i.getWidth(null) / 2, i.getHeight(null) / 2);
AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
bufferedImage = op.filter(bufferedImage, null);
return bufferedImage;
}
Se invece uso:
codice:
public BufferedImage myRotate(Image i, double degree) {
AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(degree), (i.getWidth(null) / 2), (i.getHeight(null) / 2));
BufferedImage b = new BufferedImage(i.getWidth(null), i.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g = b.createGraphics();
g.drawImage(i, at, null);
g.dispose();
return b;
}
ottengo un immagine con angoli a 90° ma con gli spazi lasciati vuoti dalla rotazione neri e non trasparenti come nel primo caso.
Qualcuno sa darmi una mano?
Grazie