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 :

[débutant] redimmensionner une ImageIcon


Sujet :

2D Java

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut [débutant] redimmensionner une ImageIcon
    Bonjour,
    j'ai inséré dans un jpanel, 2 images de type ImageIcon (car l'afficheg ede celle-ci est instantanée par rapport à celui de Image). Mais ces images sont des scan de feuille A4, et elles sont donc tronquées.
    Pour avoir un affichage complet de celle-ci, j'aimerais redimensionner mes imageIcon.
    Car d'après mes recherches, la méthode paintIcon n’autorise pas la mise à l’échelle d’une image.
    J'ai donc essayer de modifier celle - ci comme dans le code suivant, mais aucune modification n'apparait.

    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
     
    public class PanelImage extends JPanel{
     
      private ImageIcon img1;
      private ImageIcon img2;
     
      public PanelImage() {
        //java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
        //img1 = toolkit.getImage("feuille1.jpg"); //pour les types Image
        img1 = new ImageIcon("feuille1.jpg");
        img2 = new ImageIcon("feuille2.jpg");
     
        Dimension dim=new Dimension(img1.getIconWidth(), img1.getIconHeight());
        setSize(dim);
        setPreferredSize(dim);
        setMinimumSize(dim);
        setMaximumSize(dim);
      }
     
     
    public int getIconHeight()
    {
      return 453;
    }
     
    public int getIconWidth()
    {
      return 320;
    }
     
    public void paintIcon(Component c, Graphics g, int x, int y )
    {
      this.getIconHeight();
      this.getIconWidth();
    }
     
    //afficher les images
       public void paint(Graphics g)
       {
         //tracer l'image originale
         //g.drawImage(img1, 0, 0, this); // pour les types Image
     
         //tracer l'icône
         img1.paintIcon(this, g, 0, 0);
         img2.paintIcon(this, g, 320, 0);
     
       }
     
       public static void main(String[] args) {
         //Initialisation de la frame contenant l'applet
        JFrame frame = new JFrame();
        GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
        Rectangle bounds = env.getMaximumWindowBounds();
        frame.setBounds(bounds);
        frame.setTitle("Test affichage d image");
        //jpanel et jscrollpane
        PanelImage pan = new PanelImage();
        JScrollPane scroll = new JScrollPane(pan);      
        //frame.getContentPane().setLayout( new BorderLayout() );
        frame.getContentPane().add(scroll, BorderLayout.CENTER ); 
        frame.setVisible(true);
     
       }
     
    }
    Auriez vous une idée à me soumettre?
    Merci pour vos réponses.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 95
    Points : 140
    Points
    140
    Par défaut
    Il te faut en fait faire un zoom sur ton image, avec la méthode scale(double sx, double sy) d'un java.awt.Graphics2D. Mais pour aller plus loin, si tu sais manipuler des matrices, je te conseille de voir la classe java.awt.geom.AffineTransform et tu appliques ta matrice de transformation à ton Graphics2D avec setTransform.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    merci,
    je crois que je vais tenter avec le scale car étant débutant, je ne sais pas manipulé les matrices.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 95
    Points : 140
    Points
    140
    Par défaut
    De toute façon, tu dois pouvoir t'en sortir avec scale(double sx, double sy) et éventuellement translate(int x, int y).

    Au fait, si tu es débutant, tu te poses peut-être la question de comment on récupère un Graphics2D ? En fait un Graphics est un Graphics2D, donc tu fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Graphics2D graphics2D = (Graphics2D) g;

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    Bon, j'ai fait un test avce un bufferedImage. Car comme je l'ai dit a méthode paintIcon n’autorise pas la mise à l’échelle d’une image. Cette classe propose cependant une méthode getImage qui retourne une référence Image utilisable avec la méthode drawImage de Graphics pour afficher une image à l’échelle.

    Donc ds ma méthode paint(), j'ai utilisé ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
         img1 = new ImageIcon("feuille1.jpg");
        BufferedImage buf = new BufferedImage(img1.getIconWidth()/2, img1.getIconHeight()/2, BufferedImage.TYPE_INT_RGB);
        Graphics2D g2d = buf.createGraphics();
        g2d.drawImage(img1.getImage(), 0, 0, this);
    Mais rien ne s'affiche, juste un panel gris.
    Je vais tenté un autre moyen.

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    Bon, j'ai essayé un autre moyen en évitant de passer par le bufferedImage, mais en passant par une image en voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void paint(Graphics g)
    {
        //test avec getScaledInstance
        Image im = img1.getImage();
        int height = im.getHeight(this)/2;
        int width = im.getWidth(this)/2;
     
        im = im.getScaledInstance(height, width, Image.SCALE_FAST);
        //dessine image
        g.drawImage(im, 0, 0, this);
    }
    j'obtiens le mm résultat, c'est à dire rien, juste le panel gris.

    Dis plopinou, comment associer mon Graphics2D à mon ImageIcon? Car j'ai essayé deux méthodes pour redimmensionner mon ImageIcon, mais je n'ai pas réussi.
    Merci.

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

    Informations forums :
    Inscription : Décembre 2004
    Messages : 95
    Points : 140
    Points
    140
    Par défaut
    Je te conseille de charger ton image sans changer sa taille, dans un javax.swing.ImageIcon par exemple. Ensuite, ce sera au moment où tu dessines ton image dans ton composant (qui peut avoir une taille variable) que tu fais ton "zoom". Donc, tu devrais avoir quelquechose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    protected void paintComponent(Graphics graphics) {
      Graphics2D g = (Graphics2D) graphics;
      g.scale(0.5, 0.5);
      g.drawImage(myImageIcon.getImage(), new AffineTransform(), this);
    }
    Ensuite, à toi de rendre le composant plus intelligent pour qu'il s'adapte la taille de l'image à sa propre taille.

  8. #8
    Membre à l'essai
    Inscrit en
    Octobre 2004
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 38
    Points : 21
    Points
    21
    Par défaut
    En fait, j'ai (enfin) réussi à afficher mes 2 images côte à côte dans ma fenêtre en réduisant de moitié la largeur.
    Voici, comment j'ai procédé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public vois paint(Graphics g)
    {
       //test avec Graphics2D
       Graphics2D graphics2D = (Graphics2D) g;
       graphics2D.drawImage(img1.getImage(),0,0,getWidth()/2,getHeight(),this);
       Graphics2D graphics2D2 = (Graphics2D) g;
       graphics2D2.drawImage(img2.getImage(),500,0,getWidth()/2,getHeight(),this);
    }
    Merci Plopinou pour ton aide.

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

Discussions similaires

  1. [Débutant] Imprimer une fenetre en java
    Par yup dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 10/08/2004, 11h45
  2. [Débutant] Maximiser une fenetre
    Par dam_moreyllo dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 21/05/2004, 09h58
  3. [Débutant] Lancer une interface sous éclipse
    Par bonnefr dans le forum SWT/JFace
    Réponses: 11
    Dernier message: 11/05/2004, 15h59
  4. Réponses: 3
    Dernier message: 17/12/2003, 11h26
  5. [Débutant] Tester une connection sur bdd
    Par lando dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 03/09/2003, 14h37

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