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: p> 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. p> Les symptômes de mes problèmes sont affichés ici: p> http://perp.se/so/rotate_problems.html p> 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. P> 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. P> Merci pour des conseils. p> p>
4 Réponses :
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);
Si vous devez exprimer la transformation sous forme de rotation unique, le point d'ancrage dépend du sens de rotation: mais il est probablement plus simple d'exprimer comme envisagez également d'utiliser (w / 2, w / 2) code> ou
(h / 2, H / 2) code>.
traduire; tourner; Traduire code>, par exemple p>
getquadrantrotateinstance code> au lieu de
gettrotateInstance code>. p> p>
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 :)
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: p>
Comme vous n'avez besoin que de rotation de 90 degrés, vous pouvez éviter d'utiliser les trucs affinetransform: Ceci évite également de couper les bords d'images rectangulaires. P>
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)
Question équivalente pour .NET: Stackoverflow.com/questions/2225363 / c-rotate-bitmap-90-degre es