Partage
  • Partager sur Facebook
  • Partager sur Twitter

Rotation d'une image

Sujet résolu
    22 mars 2009 à 17:35:33

    Bonjour à tous, j'aimerai savoir comment faire une rotation d'une image, je connais le code pour faire une rotation d'une forme:

    AffineTransform ancienneTransformation =forme.getTransform();
    	// enregistre l'ancienne transformation
    	forme.rotate(angle, x, y);
    	// enregistre l'ancienne transformation
    	forme.setTransform(ancienneTransformation);
    	// restitue l'ancienne transformation
    

    Mais pas pour les images :( .
    • Partager sur Facebook
    • Partager sur Twitter
      22 mars 2009 à 21:11:20

      Bah pour la faire tourner suffit de faire comme ça :
      public Image replaceImage (Image img, double angleRotation) {
      	double absA = Math.abs(angleRotation);
      	int w = img.getWidth(this);
      	int h = img.getHeight(this);
      	int dy = (int) (w * Math.sin(absA));
      	int dx = (int) (w - w * Math.cos(absA));
      		
      	int hauteur = h + dy;
      	int largeur = w - dx;
      	int delta = (int) (h * Math.sin(absA)); 
      		
      	BufferedImage imageRotate = new BufferedImage (largeur, hauteur,          BufferedImage.TYPE_4BYTE_ABGR);
      	Graphics2D g2d = (Graphics2D) imageRotate.getGraphics();
      		
      	AffineTransform translation = new AffineTransform ();
      	if (angleRotation > 0) {
      		translation.translate(0, hauteur - h);
      		g2d.transform (translation); 
      		translation.setToIdentity();
      		translation.translate(-delta, 0);
      		g2d.transform (translation); 
      	} else {
      		translation.translate(delta, 0);
      		g2d.transform (translation);
      	}
      				
      		
      	AffineTransform rotation = new AffineTransform ();
      	rotation.rotate(-angleRotation);
      	
      	
      	g2d.transform(rotation);		
      	g2d.drawImage(img, 0, 0, this);
      	return imageRotate;
      }
      


      Et fait un drawImage sur ton image tournée.

      Image imageRotate = replaceImage (img, angleRotation);
      			if (a.getX() < b.getX()) {
      				if (a.getY() > b.getY()) 
      					bufferGraphique.drawImage(imageRotate, a.getX() + decalageX-5, a.getY() + decalageY - imageRotate.getHeight(this), this);
      				else
      					bufferGraphique.drawImage(imageRotate, a.getX() + decalageX-5, a.getY() + decalageY - h, this);
      			} else { 
      				if (b.getY() > a.getY())
      					bufferGraphique.drawImage(imageRotate, b.getX() + decalageX-5, b.getY() + decalageY - imageRotate.getHeight(this), this);
      				else
      					bufferGraphique.drawImage(imageRotate, b.getX() + decalageX-5, b.getY() + decalageY - h, this);
      			}
      				
      
      			repaint ();
      


      Chez moi, ce code marche bien, il me permet de placer mes textures correctement sur les sols de mes maps que je créerai plus tard pour mon futur jeux en 2D.
      Une choses que j'ai pas faîtes encore c'est récupérer l'ancienne transformation.

      Mais je me demande si il n'y a pas plus simple et d'ailleurs j'vais changer mon code.

      Puisque l'image tourner autour du point 0,0 je vais d'abord la translatée de sa largeur/2 et sa hauteur/2 pour que le centre de l'image soit au point 0,0 ensuite la redimensionner et la faire tourner, et ensuite la dessiner mais pas à partir du point 0,0 mais à partir de la hauteur et la largeur de la nouvelle image/2.

      Enfin soit je trouves ça un peu compliqué car il fait des notions de trigonométrie pour le redimensionnement de la nouvelle image pour pas qu'elle soit tronquée, je me demande si il n'y a pas plus simple.

      Ceci dis je te conseillerai quand même pas le code que je t'ai mis qui est trop lourd, mais plutôt mon autre idée que j'ai malheureusement pas encore eu le temps d'implémenter.

      Faire un jeux c'est bien mais, comment avoir le courage de le continuer ...
      • Partager sur Facebook
      • Partager sur Twitter

      Rotation d'une image

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown