1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
public BufferedImage rotation(BufferedImage bi, int degrees) {
degrees = degrees % 360;
if (degrees > 180)
degrees = 180 - degrees;
double angle = (degrees * Math.PI) / 180.0f;
if (angle == 0.0)
return bi;
// TODO une vrai rotation pour calculer la taille exacte de l'image
// après rotation
int sx = bi.getWidth();
int sy = bi.getHeight();
if (degrees == 90 || degrees == -90) {
sx = bi.getHeight();
sy = bi.getWidth();
}
BufferedImage rot = new BufferedImage(sx, sy, bi.getType());
AffineTransform at = new AffineTransform();
at.translate(sx / 2, sy / 2);
at.rotate(angle);
at.translate(-bi.getWidth() / 2, -bi.getHeight() / 2);
AffineTransformOp ato = new AffineTransformOp(at,
AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
return ato.filter(bi, rot);
} |
Partager