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'une image et position au sein d'un JPanel


Sujet :

2D Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut rotation d'une image et position au sein d'un JPanel
    Bonjour à tous,
    je travaille sur la rotation d'une image au sein d'un JPanel.
    Je précise que je ne fais que des rotations par pas de 90°.

    J'utilise pour cela la fonction rotate de graphics en prenant comme centre de rotation le centre de mon image (longueur/2, largeur/2).

    Je souhaite faire en sorte que mon image soit toujours située en haut a gauche de mon JPanel, pour cela, je la translate en fonction de l'angle et je recalcule les Bounds du JPanel englobant de la manière suivante :

    Si angle de 90 ou 270° : heightJPanel = width Image, widthJPanel = heightImage
    Si angle de 180 ou 0° : heightJPanel = height Image, heightJPanel = heightImage

    Voici la portion de 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
    		double jk=rotationCanva/(Math.PI/2);
    		if(jk%4==0){  // rotation 0%
    			g2.rotate(rotationCanva,(image.getHeight(null)*CT)/2.0,(image.getWidth(null)*CT)/2.0);
    		}
    		if(jk%4==2){ // rotation 180%
    			g2.rotate(rotationCanva,(image.getWidth(null)*CT)/2.0,(image.getHeight(null)*CT)/2.0);
    		}
    		if(jk%4==1){ // rotation 90%
    			g2.rotate(rotationCanva,(image.getHeight(null)*CT)/2.0,(image.getWidth(null)*CT)/2.0);
    			g2.translate((image.getWidth(null)*CT)/2.0,-(image.getHeight(null)*CT)/4.0);
    		}
    		if(jk%4==3){  // rotation 270%
    			g2.rotate(rotationCanva,(image.getHeight(null)*CT)/2.0,(image.getWidth(null)*CT)/2.0);
    			g2.translate((image.getWidth(null)*CT)/2.0,-(image.getHeight(null)*CT)/4.0);
    		}
    pourtant, ca ne fonctionne pas comme je le souhaiterai. Ca ne fonctionne pas pour toutes les tailles d'images. J'ai surement fait une erreur de trigo, mais les maths ne sont pas mon fort, quelqu'un peut il me renseigner ? (pour précision, Ct est une variable de zoom).

    Cordialement,

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 82
    Par défaut
    je ne comprends vraiment pas ...
    j'ai essayé en partant du point 0,0
    Si je tourne mon graphics de 90°, je devrai avoir juste à translater en x de la hauteur de mon image pour retrouver l'image inclinée partant des coordonnées 0,0, non ?

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 896
    Billets dans le blog
    54
    Par défaut
    Pourquoi mettre le topic comme resolu si le probleme persiste ?

    Il te faut bien sur faire une translation de la hauteur, mais pas sur l'axe des X, sur l'axe des Y, malgre la transformation, on repere de travail reste le repere rouge.

    Nom : Rotate.png
Affichages : 333
Taille : 5,1 Ko

    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
     
    package test;
     
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import javax.imageio.ImageIO;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.SwingUtilities;
    import javax.swing.UIManager;
     
    /**
     *
     * @author fabriceb
     */
    public class Main extends JPanel {
     
      BufferedImage image;
     
      public Main(BufferedImage image) {
        this.image = image;
      }
     
      @Override
      protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        if (image != null) {
          Graphics2D g2d = (Graphics2D) g.create();
          try {
            g2d.rotate(Math.PI / 2d);
            g2d.translate(0, -image.getHeight());
            g2d.drawImage(image, 0, 0, null);
          }
          finally {
            g2d.dispose();
          }
        }
      }
     
      /**
       * @param args the command line arguments
       */
      public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
     
          public void run() {
            try {
              UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
              BufferedImage image = ImageIO.read(new File("test.jpg"));
              JFrame frame = new JFrame("Test");
              frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              frame.setLayout(new BorderLayout());
              frame.add(new Main(image), BorderLayout.CENTER);
              frame.setLocationRelativeTo(null);
              frame.setSize(new Dimension(500, 500));
              frame.setVisible(true);
            }
            catch (Exception ex) {
              ex.printStackTrace();
            }
          }
        });
      }
    }
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

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

Discussions similaires

  1. Rotation d'une image 2D
    Par FidoDido® dans le forum Traitement d'images
    Réponses: 12
    Dernier message: 29/06/2011, 11h55
  2. Réponses: 0
    Dernier message: 29/01/2009, 15h57
  3. rotation d'une image
    Par KHEOPS1982 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 17/12/2005, 17h21
  4. Rotation d'une image TIFF
    Par Tub-95 dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 14/10/2005, 20h56
  5. Définir un angle de rotation pour une image
    Par mateo.14 dans le forum C++
    Réponses: 5
    Dernier message: 25/03/2005, 14h43

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