Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction zoom

et barres de défilement

Sujet résolu
    20 janvier 2009 à 14:04:29

    Bonjour,

    Est-ce que quelqu'un peut me dire ce que je dois utiliser pour coder une fonction de zoom à appliquer sur une image affichée dans mon applet svp?

    J'affiche l'image dans l'applet avec cette ligne :

    g.drawImage(this.scanWizardResult, 0, 0, 425, 550, this);
    


    Où this.scanWizardResult, l'image affichée, est une BufferedImage.

    Merci.
    • Partager sur Facebook
    • Partager sur Twitter
      20 janvier 2009 à 14:15:57

      salut.

      - dans ta fonction draw met des variables pour la taille de l'image.
      - créée une fonction qui a chaque fois que ton événement zoom est appelé modifie les variables précédentes et rappelle la fonction drawImage.

      aya
      • Partager sur Facebook
      • Partager sur Twitter
        20 janvier 2009 à 14:16:16

        ......... bon une solution bourinne ^^
        g.drawImage(this.scanWizardResult, -300, -300, 725, 850, this);
        

        bien sur, le -300 est arbitraire :) suffit de mettre des variables à la place:)

        une autre solution moins bourinne consisterait à ne dessiner qu'un rectangle de ton image de base :p
        • Partager sur Facebook
        • Partager sur Twitter
          20 janvier 2009 à 15:00:59

          Merci pour vos réponses rapides :)

          J'ai testé le code "solution bourinne" et ça zoome bien. Mais avant de faire la partie qui met à jour les variables, je voulais que l'image s'affiche entièrement dans l'applet ; dans mon cadre de 425 * 550, avec un scroll qui apparaît lors du zoom. Comment je peux faire svp?

          Merci.
          • Partager sur Facebook
          • Partager sur Twitter
            20 janvier 2009 à 15:56:55

            Comme t'as dis alanis :)
            tu met un listener et a chaque fois que la personne zoom tu recalcule et tu redessine :)
            • Partager sur Facebook
            • Partager sur Twitter
              20 janvier 2009 à 16:19:32

              Oui j'ai bien compris Snooooopy, mais j'ai besoin que l'image soit entièrement visible dans ma zone d'aperçu, et pas seulement une partie. Donc il me faut un scroll mais je ne sais pas comment faire pour l'avoir dans mon applet.
              • Partager sur Facebook
              • Partager sur Twitter
                20 janvier 2009 à 16:58:42

                Ok merci NeoZero je vais regarder.

                Si quelqu'un a des exemples de code simples ils sont bienvenus :)
                • Partager sur Facebook
                • Partager sur Twitter
                  21 janvier 2009 à 11:45:23

                  J'ai regardé le lien de NéoZero et d'autres trouvées sur Google concernant JScrollPane, mais je ne vois pas comment m'en servir dans mon applet.

                  Quelqu'un peut me guider svp?

                  Voici le code pour l'affichage de l'image dans l'applet:

                  /**
                     * Rafraichissement de l'affichage
                     * @param g
                     */
                    @Override
                    public void update(Graphics g)
                    {
                        paint(g);
                    }
                  
                    /**
                     * Affichage
                     * @param g
                     */
                    @Override
                    public void paint(Graphics g)
                    {
                        // si livre vide on affiche du blanc
                        if(this.scanWizardResult == null)
                        {
                            g.drawImage(Toolkit.getDefaultToolkit().createImage(" "), 0, 0, 425, 550, this);
                        }
                        // sinon on affiche une numérisation
                        else
                        {
                            g.drawImage(this.scanWizardResult, 0, 0, (int)this.viewWidth, (int)this.viewHeight, this);
                        }
                    }
                  


                  (scanWizardResult est une BufferedImage)

                  Merci
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 janvier 2009 à 11:53:38

                    Pour ajouter un JScrollPane, tu crée ton objet et tu le met en argument au constructeur de JScrollPane, et après tu n'a qu'a ajouter ton JScrollPane a ton applet (évidement sans ajouter a nouveau ton objet étant donné qu'il sera déjà dans le JScrollPane)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 janvier 2009 à 11:56:45

                      sur le liens de Neo

                      ScrollablePicture picture = new ScrollablePicture("...");
                      JScrollPane pictureScrollPane = new JScrollPane(picture);
                      

                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 janvier 2009 à 14:21:22

                        Merci pour vos réponses,

                        Ca reste encore flou pour moi :(

                        A quel niveau dois-je créer l'objet à utiliser avec le JScrollPane? Comment ajouter le JScrollPane à l'applet?

                        Peut-être que je ne me pose pas le bonnes questions, voici mon code simplifié pour tester juste la partie du sujet; dans l'applet, j'affiche une image de 2480 * 3507. L'applet est intégrée dans une page web, dans une zone de 420*550 où il manque les barres de défilement horizontale et verticale afin de voir l'image entièrement.

                        Voici le code correspondant. Quelqu'un peut me guider dans mon code svp? J'ai rajouté la ScrollablePicture dont parle Snooooopy mais je ne vois pas comment continuer après.

                        /*
                         * To change this template, choose Tools | Templates
                         * and open the template in the editor.
                         */
                        
                        import java.applet.*;
                        import java.awt.*;
                        import java.awt.image.BufferedImage;
                        import java.io.*;
                        import javax.imageio.ImageIO;
                        import java.awt.Graphics;
                        
                        
                        /**
                         * Classe myClass : Traitement des demandes utilisateur
                         * @author jack987
                         * @version 0.1
                         */
                        public class myClass extends Applet implements Runnable
                        {
                          // Gestion de l'affichage
                          private Graphics view;
                          private double viewWidth;
                          private double viewHeight;
                        
                          // Gestion du thread
                          private Thread tr;
                        
                          // Gestion des numérisations
                          private BufferedImage scanWizardResult; // contiendra la numérisation renvoyée par ScanWizard
                        
                          /**
                           * Constructeur
                           */
                          public myClass() throws Exception
                          {
                            this.view = this.getGraphics();
                            if (this.tr == null)
                            {
                              this.tr = new Thread(this);
                              this.tr.start();
                            }
                        
                            ImageIcon imageIcon = new ImageIcon("C:\\TEST\\TiffTest.tif");
                            ScrollablePicture picture = new ScrollablePicture(imageIcon, 10);
                            JScrollPane pictureScrollPane = new JScrollPane(picture);
                        
                            File test = new File("C:\\Documents and Settings\\marcyf\\Bureau\\TiffWriterTEST_0XN.tif");
                            BufferedImage bi = ImageIO.read(test);
                            this.scanWizardResult = bi;
                            this.viewWidth = this.scanWizardResult.getWidth();
                            this.viewHeight = this.scanWizardResult.getHeight();
                          }
                        
                          /**
                           * Thread d'écoute des demandes utilisateur
                           */
                          public void run()
                          {
                            while (true)
                            {
                              System.out.println("Je boucle !");
                              this.repaint();
                              try
                              {
                                Thread.sleep(1000);
                              }
                              catch(InterruptedException e)
                              {
                                e.printStackTrace();
                              }
                            }
                          }
                        
                          /**
                           * Initialisation
                           */
                          @Override
                          public void init()
                          {
                          }
                        
                          /**
                           * Rafraichissement de l'affichage
                           * @param g
                           */
                          @Override
                          public void update(Graphics g)
                          {
                              paint(g);
                          }
                        
                          /**
                           * Affichage
                           * @param g
                           */
                          @Override
                          public void paint(Graphics g)
                          {
                              // si livre vide on affiche du blanc
                              if(this.scanWizardResult == null)
                              {
                                  g.drawImage(Toolkit.getDefaultToolkit().createImage(" "), 0, 0, 425, 550, this);
                              }
                              // sinon on affiche une numérisation
                              else
                              {
                                  g.drawImage(this.scanWizardResult, 0, 0, (int)this.viewWidth, (int)this.viewHeight, this);
                              }
                          }
                        
                          /**
                           * Destructeur
                           */
                          @Override
                          public void finalize()
                          {
                          }
                        }
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                          21 janvier 2009 à 16:41:04

                          Citation : colibri

                          et après tu n'a qu'a ajouter ton JScrollPane a ton applet


                          avec la méthode add -_-'

                          [edit] : mais j'y pense, tu utilise la classe Applet de awt, pense a la changer par JApplet de swing (car un JScrollPane est un JComponent).
                          • Partager sur Facebook
                          • Partager sur Twitter
                            21 janvier 2009 à 16:53:53

                            Ok merci colibri,

                            C'est fait pour JApplet.

                            Par contre j'ai rajouté

                            pictureScrollPane.setVisible(true);
                            this.add(pictureScrollPane);
                            


                            mais ça ne change rien :(
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 janvier 2009 à 12:58:01

                              J'ai réussi à afficher une image avec les scrolls en supprimant les méthodes paint et update et en organisant comme ça:

                              public void init()
                                {
                                  System.setSecurityManager(null);
                                  this.setPreferredSize(new Dimension(420,550));
                              
                                  ImageIcon imageIcon = new ImageIcon("C:\\Documents and Settings\\jack987\\Bureau\\MorenaStudio.jpeg");
                                  ScrollablePicture picture = new ScrollablePicture(imageIcon, 0);
                                  JScrollPane pictureScrollPane = new JScrollPane(picture);
                                  pictureScrollPane.setVisible(true);
                              
                                  this.getContentPane().add(pictureScrollPane);
                                }
                              
                              public static void main(String[] args) throws Exception
                                {
                                      JFrame frame = new JFrame();
                                      MyClass myclass = new MyClass ();
                              
                                      myclass .init();
                                      frame.getContentPane().add(myclass );
                                      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                                      frame.pack();
                                      frame.setVisible(true);
                                }
                              


                              Comment puis-je faire pour dézoomer mon image afin qu'elle tienne entièrement dans mon cadre de 420 * 550? Cela me permettra de mettre à jour mes fonctions de Zoom avec ces derniers changements.

                              Meci
                              • Partager sur Facebook
                              • Partager sur Twitter
                                23 janvier 2009 à 9:02:29

                                J'ai réussi à recoder mes zooms avec la méthode getScaledInstance de la classe Image :

                                ImageIcon imageResized = new ImageIcon(imageIcon.getImage().getScaledInstance((int)this.viewWidth,(int) this.viewHeight, Image.SCALE_SMOOTH));
                                ScrollablePicture picture = new ScrollablePicture(imageResized, 10);
                                


                                Par contre mon code ne marche pas pour les fichiers TIF : JPEG, PNG oui mais pas TIF :(
                                Quelqu'un sait ce que je dois faire pour que ça puisse marcher même avec un TIF svp?

                                Merci


                                -------------------------------------------------------------------------------------------

                                J'ai trouvé réponse ici : http://www.rgagnon.com/javadetails/java-0605.html

                                Merci à tous pour votre aide
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 février 2009 à 8:34:34

                                  Salut à tous,

                                  J'ai lu et essayé de faire ce qui a été écrit ici. J'ai l'image qui s'agrandit mais mon problème c'est que la pointe de la souris n'est plus à la même endroit. Je veux déplacer un objet de ma cadre "image" et je n'arrive pas à le faire bouger. Sans la zoom j'arrive bien à le déplacer.

                                  Qlq un peut me donner un tuyau??

                                  Merci
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    16 février 2009 à 9:14:54

                                    Citation : ibilakely

                                    Salut à tous,

                                    J'ai lu et essayé de faire ce qui a été écrit ici. J'ai l'image qui s'agrandit mais mon problème c'est que la pointe de la souris n'est plus à la même endroit. Je veux déplacer un objet de ma cadre "image" et je n'arrive pas à le faire bouger. Sans la zoom j'arrive bien à le déplacer.

                                    Qlq un peut me donner un tuyau??

                                    Merci


                                    je supposes que tu parles de la position de souris par rapport a l'image ....
                                    le principe est simple on dessine l'image en donnant les coordonées de ses 4 coins ... plus on écarte ses 4 point plus l'image parrait grande .... en même temps si tu décales les 4 point vers la gauche (enfin juste le point haut gauche)
                                    tu décal ton image vers la gauche ...
                                    donc 1 tu reprend les coordonée du clic
                                    2 tu agrandis
                                    3 tu décale de façons à ce que la souris reste au bon endroit :o


                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 février 2009 à 7:29:46

                                      Salut snoooopy!

                                      J'ai essayé ta solution mais je ne sais pas si je l'ai bien compris. Je t'explique ce que j'avais fait.

                                      - lancement de l'application:
                                      j'ai créé une zone image avec
                                      pas = 0;
                                      graphicImage = createImage(tailleX, tailleY);

                                      en suite, dans la methode paint:

                                      Citation


                                      public void paint(){
                                      ....
                                      width += pas;
                                      heigth += pas;
                                      graphic.drawImage(graphicImage, 0, 0, width, height, this);
                                      ...
                                      }



                                      Là tout marche bien.

                                      - Click sur zoom+. en appellant repaint() j'ai fait,

                                      Citation : Pas de titre


                                      width += pas;
                                      heigth += pas;
                                      graphic.drawImage(graphicImage, 0, 0, width, height, this);



                                      - Click sur zoom-. en appellant repaint() j'ai fait,

                                      Citation : Pas de titre


                                      width -= pas;
                                      heigth -= pas;
                                      graphic.drawImage(graphicImage, 0, 0, width, height, this);



                                      - Dans mousePressed (au cas où zoom+): je veux déplacer un objet en x', y'

                                      Citation


                                      int x = e.getX() + pas;
                                      int y = e.getY() + pas;
                                      object.deplace(x, y);



                                      (J'espère que tu as compris ce que j'ai voulu faire.)
                                      Et là quand pas = 0 tout est ok
                                      Mais dès que pas change le pointeur ne se situe plus sur le coordonnées x',y'

                                      Tu peux me montrer où est ce que j'ai mis faux???

                                      Merci !!!!
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        18 février 2009 à 11:12:34

                                        tu es dans un JScroll Pane ?
                                        ou bien simplement dans une zone graphique ?
                                        dans le deuxieme cas pour déplacer ton image, il suffit de changer les coordonées 0,0 et les déplacer de façon a centrer ton image ...

                                        int decalX = DemiEcrans - coordoneeclicX;
                                        int decalY =DemiEcrans - coordoneeclicY;
                                        graphic.drawImage(graphicImage, decalX, decalY, width, height, this);
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 février 2009 à 16:12:14

                                          J'ai mis la zone graphique sur un JScrollPane. Et j'ai besoin de la coordonnées 0,0 car y a un ecrito qui est affiché, si je change ce decalX, decalY alors l'écrito ne s'affiche plus.
                                          Sur la zone graphic, j'ai affiché des ronds. et se sont ces ronds que je veux déplacer un par un.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            19 février 2009 à 9:16:40

                                            J'ai une question pour cette fonction zoom:
                                            Quand on appelle graphic.drawImage(graphicImage, decalX, decalY, width, height, this); c'est le cadran qui s'agrandit? L'image qui est sur ce cadran reste à ses coordonnées initiale?
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              19 février 2009 à 17:45:56

                                              tu entends quoi par cadrans :ange: ?

                                              tt ce que tu fais c'est redessiner l'image en plus grand =/
                                              avec des coordonée négative(ou positive) pour la décaler =/
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Fonction zoom

                                              × 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