J'ai des problèmes de rotation des images en Java à l'aide de la classe AffineTransform.Problèmes lors de la rotation de BufferedImage
I ont la méthode suivante pour créer une rotation (90 degrés) copie d'une image:
private BufferedImage createRotatedCopy(BufferedImage img, Rotation rotation) {
int w = img.getWidth();
int h = img.getHeight();
BufferedImage rot = new BufferedImage(h, w, BufferedImage.TYPE_INT_RGB);
double theta;
switch (rotation) {
case CLOCKWISE:
theta = Math.PI/2;
break;
case COUNTERCLOCKWISE:
theta = -Math.PI/2;
break;
default:
throw new AssertionError();
}
AffineTransform xform = AffineTransform.getRotateInstance(theta, w/2, h/2);
Graphics2D g = (Graphics2D) rot.createGraphics();
g.drawImage(img, xform, null);
g.dispose();
return rot;
}
rotation est un simple enum avec les valeurs NONE, sens horaire et antihoraire.
Les symptômes de mes problèmes sont affichés ici:
http://perp.se/so/rotate_problems.html
Ainsi, la rotation fonctionne bien, mais les images qui en résultent ne sont pas ancrés aux coordonnées correctes (ou comment on doit le mettre). Et puisque je ne sais pas vraiment ce que je fais en premier lieu (mon algèbre linéaire est faible), je ne sais pas comment résoudre cela par moi-même.
J'ai essayé avec un peu de bidouillage aléatoire avec l'instance AffineTransform, mais cela ne m'a pas aidé (bien sûr). J'ai essayé de googler (et de chercher SO), mais tous les exemples que j'ai vus utilisent essentiellement la même approche que moi ... ce qui ne fonctionne pas pour moi.
Reconnaissant pour le conseil.
question équivalente pour .NET: http://stackoverflow.com/questions/2225363/c-rotate-bitmap-90-degrees – finnw