IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Rotation d'image (je hais la trigo mais j'en ai besoin)


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 78
    Par défaut Rotation d'image (je hais la trigo mais j'en ai besoin)
    Bonjour,

    Le titre dit presque tout : j'ai une image que j'affiche et sur laquelle, suite à un choix d'un menu contextuel, il peut y avoir des rotations selon des angles multiples de 45°.
    L'image est affichée dans une JInternalFrame dont la taille est égale à la taille de l'image.
    La rotation est faite par rapport au centre de l'image et se passe bien mais bien entendu une fois tournée, l'image dépasse les côtés de la fenêtre. Il faut donc appliquer une translation vers la droite et/ou vers le bas et redimensionner la fenêtre et pour cela j'ai récupéré un bout de code mais ça ne marche pas, quand je fais une rotation de +/-45° ou +/-135°, l'image n'est pas sufisamment translatée.
    J'ai essayé de trouver la bonne formule (par un peu de recherche sur ce forum et ailleurs, et pas ma propre réflexion mathématique) mais sans succès. Alors si il y a un connaisseur des arcanes de la trigo ... merci d'avance.

    Un bout de code :

    Ma classe de la fenetre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    public class FenetreSceneEtre extends JInternalFrame{
    	private	BufferedImage		image;
     
    	public void paint(Graphics g) {
    		Graphics2D g2d = (Graphics2D)g;
    		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     
    		g2d.drawImage(image, 0, 0, null);
    	}
     
    	private void reOrienterImage(double angle) {
    		// rotation de l'image
    		tournerImage(image, angle);
     
    		// retailler la fenetre
    		hauteur = image.getHeight();
    		largeur = image.getWidth();
    		setSize(largeur, hauteur);
    	}
     
    	public void tournerImage(BufferedImage image,double angle) {
    		double angleRad = Math.toRadians(angle);
    		double sinA = Math.sin(angleRad);
     
    		// Rotation
    		AffineTransform tx = new AffineTransform();
    		tx.rotate(angleRad,image.getWidth()/2, image.getHeight()/2);
    		AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
     
    		// **************************
    		// Translation
    		// LA OU CE SITUE LE PROBLEME !!!!
    		// **************************
    		Rectangle rect = op.getBounds2D(image).getBounds();
    		tx.translate(sinA * rect.getX(), -sinA * rect.getY());
    		op = new AffineTransformOp(tx,AffineTransformOp.TYPE_BILINEAR);
     
    		image = op.filter(image, op.createCompatibleDestImage(image, null) );
    	}
    }

    La fonction appelée depuis le menu popup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public void tournerSceneEtre(FenetreSceneEtre fenetre, double angle) {
    	fenetre.reOrienterImage(angle);
    	fenetre.repaint();
    }

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pourquoi ne pas utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transform(Point2D ptSrc, Point2D ptDst)
    avec les coordonnées respectives des coins de l'image d'origine. Ainsi t'aura leur valeur transformée et de la tu connaitra facilement les nouvelles dimensions de l'image. avec ces dernières t'aura aussi facilement de combien tu dois translater et de combien tu dois agrandir. C'est pas très trigo mais c'est assez pragmatique

Discussions similaires

  1. rotation d'images
    Par philippe du web dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/05/2007, 16h01
  2. Rotation d'image dans un état
    Par Papapetch dans le forum IHM
    Réponses: 3
    Dernier message: 10/06/2006, 18h02
  3. Rotation d'image (matrice)
    Par AsmBoy dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 16/01/2006, 07h49
  4. Faire une rotation d'image
    Par sozie9372 dans le forum 2D
    Réponses: 6
    Dernier message: 30/11/2005, 22h40
  5. [Image]Rotation d'image
    Par psychomatt dans le forum 2D
    Réponses: 6
    Dernier message: 16/12/2004, 20h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo