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 :

[Image]Rotation d'image


Sujet :

2D Java

  1. #1
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut [Image]Rotation d'image
    Je me suis largement inspiré d'un code trouvé sur un topic de ce forum pour réaliser des rotation d'images.
    Je l'ai inclu dans une classe me permettant de manipuler des images.
    La rotation fonctionne, mais imposible ensuite de dépacer mon ImagePanel. Pourquoi ???

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
     
    import javax.imageio.ImageIO;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.geom.AffineTransform;
    import java.awt.image.AffineTransformOp;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.io.IOException;
     
    public class ImagePanel extends JPanel
    {
        private BufferedImage image;
        private int w;  	// largeur de l'image
        private int h;  	// hauteur de l'image
    /**
    * Le constructeur :
    * @param filePath le fichier de l'image.
    * @param x coordonnée x du coin supérieur gauche.
    * @param y coordonnée y du coin supérieur gauche.
    * @param width largeur de l'image.
    * @param height hauteur de l'image.
    */
        public ImagePanel(String filePath, int x, int y, int width, int height)
        {
            super(null, true);
    		File fileImg = new File(filePath);
            try {
                image = ImageIO.read(fileImg);
            } catch (IOException e) {
                image = null;
                System.err.println("Fichier invalide");
            }
     
    		if( width<=0 && height<=0){
    			w = image.getWidth(this);
    			h = image.getHeight(this);
    		} else {
            	w = width;
            	h = height;
    		}
    		setBounds(x, y, w, h);
    		//setOpaque(false);
    		setBackground(Color.red );
            setVisible(true);
        }
     
    	/**
            * ImagePanel au dimensions de l'image originale
            * @param filePath Chemin l'image.
            * @param x coordonnée x du coin supérieur gauche.
            * @param y coordonnée y du coin supérieur gauche.
            */
    	public ImagePanel(String filePath, int x, int y)
    	{
    		this( filePath, x, y, 0, 0);
    	}
     
    	/**
             * Applique une rotation de <code>scale</code> radians à la propriété <code>image</code>
             * @param scale Angle de rotation (max: 2*pi)
             */
    	public void rotate(double scale)
    	{
    		double sinA = Math.sin(scale);
     
    		AffineTransform tx = new AffineTransform();
    		tx.rotate(scale, this.image.getWidth() / 2, this.image.getHeight() / 2);
    		AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
     
    		Rectangle rect = op.getBounds2D(this.image).getBounds();
    		tx.translate(sinA * rect.getX(), -sinA * rect.getY());
    		op = new AffineTransformOp(tx,AffineTransformOp.TYPE_BILINEAR);
     
    		this.image = op.filter(this.image, op.createCompatibleDestImage(this.image, null) );
    		this.setBounds( new Rectangle(this.image.getWidth(), this.image.getHeight()) );
    		this.w = this.image.getWidth();
    		this.w = this.image.getWidth();
    		this.h = this.image.getHeight();
    	}
     
    /**
    * Gere l'affichage graphique du JPanel, ainsi que le refraichissement.
    */
        public void paint(Graphics g)
        {
    		g.drawImage(image, 0, 0, w, h, null);
    		g.drawRect(0,0,w+1,h+1);
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    ImagePanel img = new ImagePanel("img.gif",100,100);
    menu.add( img );
    img.rotate(3.14);
    img.setAlignmentX(400);
    img.setAlignmentY(500);
    Aucun déplacement de mon image (bien affichée à 180°)

    Merci d'avance.







    [Modéré par Didier]
    Ajout de tag dans le titre
    Lire les règles du forum : Règles du forum Java

  2. #2
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Si ma mémoire est bonne, on peut faire une rotation avec un contexte graphique Graphics2D (qui est lui-même lié à un AffineTransform object) et il y a une méthode rotate() qui équivaut à un AffineTransforme avec cette matrice ...

    [ cos(T) -sin(T) 0 ]
    [ sin(T) cos(T) 0 ]
    [ 0 0 1 ]

    Dom

  3. #3
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut
    Merci mais là, il va falloir me la refaire en français
    La rotation fonctionne. Mais je ne peux pas positionner mon graphisme si j'en applique une. Je cherche à savoir pourquoi.

  4. #4
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut Ereka!
    J'ai trouvé
    Le pb venait de la dernière partie du code:
    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
       /**
        * Applique une rotation de <code>scale</code> radians à la propriété <code>image</code>
        * @param scale Angle de rotation (max: 2*pi)
        */
       public void rotate(double scale)
       {
          double sinA = Math.sin(scale);
     
          AffineTransform tx = new AffineTransform();
          tx.rotate(scale, this.image.getWidth() / 2, this.image.getHeight() / 2);
          AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
     
          Rectangle rect = op.getBounds2D(this.image).getBounds();
          tx.translate(sinA * rect.getX(), -sinA * rect.getY());
          op = new AffineTransformOp(tx,AffineTransformOp.TYPE_BILINEAR);
          this.image = op.filter(this.image, op.createCompatibleDestImage(this.image, null) );
     
     
          //C'est ça qui foutait le dawa!
          this.setBounds( getX(), getY(), image.getWidth(), image.getHeight()  );
          this.w = image.getWidth();
          this.h = image.getHeight();
       }

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 7
    Points : 7
    Points
    7
    Par défaut rotation --> Image tronquée
    J'ai essayé la méthode rotate pour faire tourner une image, mais lorsque je tourne mon image d'un faible angle, l'image est tronquée sur les côtés, et l'on ne voit plus apparaître l'image entière. Quelqu'un à la solution ?

  6. #6
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    Ben ça me parait logique : la taille de ton composant où tu affiches ton image est définie à l'avance, avant que tu rotate ton image. Donc si quand tu l'as rotaté (du verbe "rotater" du premier groupe, je rotate/tu rotates...) tu ne resize pas ton composant (du verbe... bon d'accord je vais sortir...) forcément ça taille dans les coins. Mais alors là pour redimensionner ton composant à la bonne taille en tenant compte de l'agrandissement du rectangle englobant du à la rotation, alors ça ça pue les maths et la trigonométrie (à mes souhaits !).

    Bon courage @+++
    Sébastien ARBOGAST
    SCJP

  7. #7
    Membre averti
    Avatar de rozwel
    Inscrit en
    Mars 2002
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 324
    Points : 334
    Points
    334
    Par défaut
    Eh au fait... bienvenue sacrejohn...
    Sébastien ARBOGAST
    SCJP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Manipulation d'images : intégrer une image dans une image
    Par noscollections dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/10/2014, 11h51
  2. [Image] Rotation d'image
    Par millie dans le forum Contribuez
    Réponses: 0
    Dernier message: 08/04/2008, 21h46
  3. rotation d'images
    Par philippe du web dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 02/05/2007, 16h01
  4. Rotation d'image (matrice)
    Par AsmBoy dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 16/01/2006, 07h49
  5. Faire une rotation d'image
    Par sozie9372 dans le forum 2D
    Réponses: 6
    Dernier message: 30/11/2005, 22h40

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