10
votes

Problèmes tournants tampon

J'ai des problèmes avec des images en rotation en Java à l'aide de la classe Affinetransform.

J'ai la méthode suivante pour créer une copie rotative (90 degrés) d'une image: xxx

La rotation est une simple enum avec les valeurs nées, dans le sens horaire et dans le sens inverse des aiguilles d'une montre.

Les symptômes de mes problèmes sont affichés ici:

http://perp.se/so/rotate_problems.html

Donc, la rotation fonctionne correctement, mais les images résultantes ne sont pas ancrés dans les bonnes coordonnées (ou comment il faut le mettre). Et puisque je ne sais pas vraiment ce que je fais de quoi je fais en premier lieu (mon algèbre linéaire est faible), je ne sais pas comment résoudre ceci seul.

J'ai Essayé avec des fidèles aléatoires avec l'instance affinétransform, mais cela ne m'a pas aidé (bien sûr). J'ai essayé de googler (et de les chercher), mais tous les exemples que j'ai vus utilisent essentiellement la même approche que moi ... ce qui ne fonctionne pas pour moi.

Merci pour des conseils.


1 commentaires

4 Réponses :


0
votes

Je ne sais pas si cela pourrait être votre problème.

g.transform(AffineTransform.getRotateInstance(theta));
g.drawImage(img, 0, 0, w/2, h/2, null, null);


0 commentaires

18
votes

Si vous devez exprimer la transformation sous forme de rotation unique, le point d'ancrage dépend du sens de rotation: (w / 2, w / 2) ou (h / 2, H / 2) .

mais il est probablement plus simple d'exprimer comme traduire; tourner; Traduire , par exemple xxx

envisagez également d'utiliser getquadrantrotateinstance au lieu de gettrotateInstance .


4 commentaires

J'obtiens ce que tu dis et j'ai essayé ça aussi. Le problème persiste cependant. Ils sont toujours étirés «à l'extérieur» de la zone cible, bien que sur le "autre côté" horizontalement, pour ainsi dire. Je pourrais fournir d'autres captures d'écran si on ne sait pas ce que j'arrive.


@Perp, vous avez raison, corrigé. J'ai testé la nouvelle version et ça marche.


Fonctionne comme un charme! Je pense que j'ai une meilleure compréhension de ce qui se passe maintenant. Merci!


Si cela peut aider quiconque: après avoir appliqué cette solution, mon image était toujours partiellement recadrée mais seulement sur un axe. Le problème n'était pas sur la transformation, mais en raison du fait que j'utilisais un type d'image erroné. Alors pensez à ça aussi :)



1
votes

Vous pouvez essayer une approche alternative et créer une icône à partir de l'image, puis utilisez un Icône tournée .

ou vous pouvez essayer cet ancien code que j'ai trouvé dans les forums Sun: xxx


0 commentaires

3
votes

Comme vous n'avez besoin que de rotation de 90 degrés, vous pouvez éviter d'utiliser les trucs affinetransform: xxx

Ceci évite également de couper les bords d'images rectangulaires.

de: http://snippets.dzone.com/posts/show/2936


3 commentaires

Juste une tête, forçant un accès direct aux valeurs de pixels RVB prend l'image du pipeline accéléré de Java2D. Cette approche peut vous donner le résultat que vous voulez, mais c'est beaucoup plus lent.


Aha. Je ne le savais pas. Merci


J'ai testé ce code et il ne tourne pas simplement l'image, il change également à gauche et à droite (comme dans un miroir)