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

AWT/Swing Java Discussion :

Zone sélectionnable image


Sujet :

AWT/Swing Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Points : 64
    Points
    64
    Par défaut Zone sélectionnable image
    Bonjour,
    J'ai une image dans laquel je selectionne une zone, je veux que quand on selectionne cette zone elle s'enregistre pour pouvoir la traiter apres sinon soit elle reste selectionner et se considere comme l'image de traitement ou elle s'affiche dans une autre fenetre tte seul mais j'arrive pas à le faire voila mon code je suis preneuse de n'importe quel aide merci
    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
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    import java.awt.AlphaComposite; 
    import java.awt.Color; 
    import java.awt.Graphics; 
    import java.awt.Graphics2D; 
    import java.awt.Point; 
    import java.awt.Rectangle; 
    import java.awt.event.MouseEvent; 
    import java.awt.event.MouseListener; 
    import java.awt.event.MouseMotionListener; 
    import java.awt.image.BufferedImage; 
    import java.io.File; 
    import java.io.IOException; 
     
    import javax.imageio.ImageIO; 
    import javax.swing.JComponent; 
    import javax.swing.JFrame; 
     
    public class testimage extends JComponent implements MouseListener, 
            MouseMotionListener { 
     
        private static final long    serialVersionUID    = 7774248752982522933L; 
        private BufferedImage        image                = null; 
        private Point                porig                = null; 
        private Point                pmove                = null; 
     
        public static void main(String args[]) { 
            final JFrame f = new JFrame("Selection Demo"); 
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
            f.setSize(800, 600); 
            f.setLocationRelativeTo(null); 
            try { 
                f.setContentPane(new testimage(new File("d:/test.bmp"))); 
            } catch (final IOException e) { 
                e.printStackTrace(); 
            } 
            f.setVisible(true); 
        } 
     
        public testimage(final File image) throws IOException { 
            this.image = ImageIO.read(image); 
            porig = null; 
            pmove = null; 
            // ajout des listeners 
            addMouseListener(this); 
            addMouseMotionListener(this); 
        } 
     
        @Override 
        public void paintComponent(final Graphics g) { 
            super.paintComponent(g); 
            final Graphics2D g2 = (Graphics2D) g; 
            if (image != null) { 
                // dessine l'image en haut à gauche 
                // fleme de faire mieux 
                g2 
                        .drawImage(image, 0, 0, image.getWidth(), 
                                image.getHeight(), this); 
            } 
            if (pmove != null && porig != null) { 
                g2.setColor(Color.BLACK); 
     
                // calcul de la selection 
                final Rectangle rect = new Rectangle((pmove.x > porig.x) ? porig.x : pmove.x, 
                                (pmove.y > porig.y) ? porig.y : pmove.y, 
                                (pmove.x > porig.x) ? pmove.x - porig.x : porig.x 
                                        - pmove.x, (pmove.y > porig.y) ? pmove.y 
                                        - porig.y : porig.y - pmove.y); 
                // dessine le fond de la selection avec un effet de transparence 
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .2f)); 
                g2.fillRect(rect.x, rect.y, rect.width, rect.height); 
                // suppression de la transparence pour dessiner la bordure 
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f)); 
                g2.drawRect(rect.x, rect.y, rect.width, rect.height); 
            } 
        } 
     
        public void mousePressed(final MouseEvent e) { 
            porig = e.getPoint(); // récupération du point d'origine 
            // repaint du composant 
            repaint(); 
        } 
     
        public void mouseReleased(final MouseEvent e) { 
            // cleanup de l'affichage, mais tu peux faire la découpe ici 
            pmove = null; 
            porig = null; 
            // repaint du composant 
            repaint(); 
        } 
     
        public void mouseDragged(final MouseEvent e) { 
            pmove = e.getPoint(); // récupération du point en déplacement 
            // repaint du composant 
            repaint(); 
        } 
     
        public void mouseClicked(final MouseEvent e) { } 
        public void mouseEntered(final MouseEvent e) { } 
        public void mouseExited(final MouseEvent e) { } 
        public void mouseMoved(final MouseEvent e) { } 
    }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    La solution t'est évoquée dans la méthode suivante (dans le commentaire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void mouseReleased(final MouseEvent e) { 
            // cleanup de l'affichage, mais tu peux faire la découpe ici 
            pmove = null; 
            porig = null; 
            // repaint du composant 
            repaint(); 
        }
    Il suffit que tu copies les valeurs de pmove et porig dans 2 variables (ou fabriquer un rectangle qui représente la zone. Tu prévois une méthode qui permet de récupérer cette(ces) information(s) pour pouvoir en faire ce que tu en veux ailleurs.

    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
    public class testimage extends JComponent implements MouseListener, 
            MouseMotionListener { 
     
            /*...*/
     
            private Rectangle derniereSelection;
     
     
            /*...*/
     
            public Rectangle getDerniereSelection() {
                  return derniereSelection;
            }
     
            /*...*/
           public void mouseReleased(final MouseEvent e) { 
            // cleanup de l'affichage, mais tu peux faire la découpe ici 
            if ( !Objects.equals(pmove,porig) ) { // on ne fait pas en cas de sélection vide (si les deux points sont les mêmes)
                 Rectangle rectangle = new Rectangle(); 
                 rectangle.setFrameFromDiagonal(porig,pmove); // on s'assure que le rectangle est correctement orienté en utilisant cette méthode
                 derniereSelection = rectangle;
            }
            pmove = null; 
            porig = null; 
            // repaint du composant 
            repaint(); 
        }
     
        /*...*/
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    A noter que comme pmove n'est pas initialisé dans mousePressed, il peut être null lors du release. Il faut donc tester ce cas :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( pmove!=null && !Objects.equals(pmove,porig) ) { // on ne fait pas en cas de sélection vide (si les deux points sont les mêmes)
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Points : 64
    Points
    64
    Par défaut
    Oui enfaite j'avait réalisé que soit ça le prb et j'ai bien fait la condition , ça a marché mais ça selectionne juste la partie que je veux mais quand je relache ça repart et du coup elle reste ni selectionner ni elle s'enregistre, et c'etais ça ma question au début. Comment pouvoir enregistrer cette derniere pour pouvoir la traiter apres, appliquer des filtres juste sur cette zone...

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    La zone est stockée dans la variable derniereSelection. Si tu veux qu'elle s'affiche, il suffit d'ajouter son affichage, par exemple :

    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
    @Override 
        protected void paintComponent(final Graphics g) { 
            super.paintComponent(g); 
            final Graphics2D g2 = (Graphics2D) g; 
            if (image != null) { 
                // dessine l'image en haut à gauche 
                // fleme de faire mieux 
                g2 
                        .drawImage(image, 0, 0, image.getWidth(), 
                                image.getHeight(), this); 
            } 
    
            if ( derniereSelection!=null ) {
                g2.setColor(Color.RED); // par exemple pour l'afficher en rouge
                // ici tu peux faire appel à setStroke pour changer le type de ligne
                g2.draw(derniereSelection); // dessine le rectangle
            }
    
            if (pmove != null && porig != null) { 
                g2.setColor(Color.BLACK); 
     
                // calcul de la selection 
                final Rectangle rect = new Rectangle((pmove.x > porig.x) ? porig.x : pmove.x, 
                                (pmove.y > porig.y) ? porig.y : pmove.y, 
                                (pmove.x > porig.x) ? pmove.x - porig.x : porig.x 
                                        - pmove.x, (pmove.y > porig.y) ? pmove.y 
                                        - porig.y : porig.y - pmove.y); 
                // dessine le fond de la selection avec un effet de transparence 
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .2f)); 
                g2.fillRect(rect.x, rect.y, rect.width, rect.height); 
                // suppression de la transparence pour dessiner la bordure 
                g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f)); 
                g2.drawRect(rect.x, rect.y, rect.width, rect.height); 
            } 
        }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2016
    Messages : 185
    Points : 64
    Points
    64
    Par défaut
    Merci beaucoup pour ton aide je passe en resolu

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

Discussions similaires

  1. colorier une zone d'image dans une applet
    Par lou_ravi dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 16/11/2008, 22h34
  2. Comment parcourir un range ayant deux zones sélectionnées
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/09/2008, 15h00
  3. Zone selectionnable image
    Par Invité(e) dans le forum Applets
    Réponses: 1
    Dernier message: 27/05/2008, 12h26
  4. [Word][Modèles] Insertion d'une zone d'images
    Par unacsed dans le forum Word
    Réponses: 1
    Dernier message: 05/03/2007, 11h37
  5. [XSL~FO] zone cliquable & image, petit problème.
    Par dhakkta dans le forum XSL/XSLT/XPATH
    Réponses: 10
    Dernier message: 14/02/2007, 15h10

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