Bonjour,
Voila, j'ai une image présente dans un canvas. J'aimerais lui faire faire une rotation (de n'importe quel angle) sur elle même.
Si vous avez une piste ou du code ce serait cool !
Merki !
+++
Ju
Version imprimable
Bonjour,
Voila, j'ai une image présente dans un canvas. J'aimerais lui faire faire une rotation (de n'importe quel angle) sur elle même.
Si vous avez une piste ou du code ce serait cool !
Merki !
+++
Ju
Je viens de trouver un bout de code qui ne m'a pas l'air mal :
ici
Peut être que ca pourra en aider d'autres...
+++
Ju
Marrant, apparement qqun ne connait pas la classe TexturePaint. Mais bon d'un autre cote c'est peut-etre plus leger et ca marche avec des versions de Java plus anciennes.Code:Pour obtenir une répétition de l'image à l'infini, la méthode getPixel() de la classe MyImage a été modifiée pour toujours retourner une valeur, quelles que soient les coordonnées demandées.
Sinon pour en revenir a la question, soit :
Au choix :Code:
1
2
3
4
5
6 double centerX = image.getWidth()/2.0; double centerY = image.getHeight()/2.0; Graphics2D graphics = ... graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
Code:
1
2
3
4 graphics.rotate(angle, centerX, centerY); graphics.drawImage(image, 0, 0, null); graphics.rotate(-angle, centerX, centerY);
Avec production d'une nouvelle image :Code:
1
2
3
4
5 AffineTransform transform = AffineTransform.getRotateInstance(angle, centerX, centerY); graphics.setTransform(transform); graphics.drawImage(image, 0, 0, null); graphics.setTransform(transform.createInverse()); // Cette methode peut lever une exception.
Code:
1
2
3
4 AffineTransform transform = AffineTransform.getRotateInstance(angle, centerX, centerY); AffineTransformOp op = new AffineTransformOp(transform, AffineTransformOp.TYPE_BICUBIC); BufferedImage rotatedImage = op.filter(image, null);
pour la légèreté faut voir, vu le peu de célérité dont fait peu preuve java sur tout ce qui concerne la trigo...
Bof, ca peut s'arrancer avec la bonne vieille methode du "on se precalcule une table des sin et cos pour eviter de les recalculer a chaque fois".
ou du jni au choix
Heu il ne faut pas exagerer. Je code en ce moment meme des demos Java qui utilise de la trigo pour faire du rendu a 60 fps en plein ecran et il n'y a pas de probleme. Quand on dessine des images ce n'est pas un cos() qui fait perdre du temps ^^