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 :

affichage de l'histogramme


Sujet :

2D Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 50
    Points : 26
    Points
    26
    Par défaut affichage de l'histogramme
    Voilà je veux afficher l'histogramme d'une image .

    Je ne sais pas comment faire appel à l'histogramme pour qu'il s'affiche

    Voilà mon 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
    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
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
     
    public class fen02 extends JFrame implements ActionListener{
     
    private JLabel photoPreview;private JLabel histo;
     
    private BufferedImage image,image2;
    int width;        
    int height;
     
    public fen02(){
            super("");    
            build();
            }
     
        public void build(){
            setTitle("debut du projet"); 
            setSize(1200,900); 
            setResizable(true);
            setContentPane(buildContentPane());}
     
            private JPanel buildContentPane(){
            JPanel panel = new JPanel();
            panel.setLayout(null);
     
     
            photoPreview = new JLabel();
            photoPreview.setBounds(100,200,200,200);
            panel.add(photoPreview);
     
            histo = new JLabel();
            histo.setBounds(400,600,200,200);
            panel.add(histo);
     
     
     
     
            JMenuBar menuBar = new JMenuBar();
            JMenu menu1 = new JMenu("Fichier");
            JMenuItem ouvrir = new JMenuItem("Ouvrir");
            menu1.add(ouvrir);
            Ecouteur1 ec1=new Ecouteur1();
            ouvrir.addActionListener(ec1);
            menuBar.add(menu1);
            setJMenuBar(menuBar);
     
            return panel;
     
            }
     
     
            class Ecouteur1 implements ActionListener{
            public void actionPerformed(ActionEvent e)
            {
            JFileChooser fc = new JFileChooser();
            int returnVal = fc.showOpenDialog
            (fen02.this);
            if(returnVal == JFileChooser.APPROVE_OPTION){
     
            java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
            String f=fc.getSelectedFile().getName();
            Image img = toolkit.getImage(f);
            ImageIcon ic = new ImageIcon(img.getScaledInstance(150, 150,Image.SCALE_AREA_AVERAGING));
     
            photoPreview.setIcon(ic);
     
     
            String ff=fc.getSelectedFile().getName();
     
            try{
            image = ImageIO.read(new File(ff));
     
     
     
     
            int[] histoRouge = new int[256];
    int[] histoVert = new int[256];
    int[] histoBleu = new int[256];
    int w = image.getWidth();
    int h =image.getHeight();
    int[] rgbs = new int[w*h]; 
    image.getRGB(0,0,w,h,rgbs,0,w);
    for(int c=0; c<256; c++){
      histoRouge[c] = 0;
      histoVert[c] = 0;
      histoBleu[c] = 0;
    }
     
     
     
     
    for (int i = 0; i < rgbs.length; i++) {
      int rouge = (rgbs[i] >>16 ) & 0xFF;
      int vert = (rgbs[i] >> 8 ) & 0xFF;
      int bleu = rgbs[i] & 0xFF;
      histoRouge[rouge] ++;
      histoVert[vert] ++;
      histoBleu[bleu] ++;
            }
     
     
            }
     
     
     
     
     
     
            catch (IOException ee){}
     
            }}}
     
     
            public void actionPerformed(ActionEvent e) {
            Object source = e.getSource();
            }
     
     
            public static void main(String[] args) {
            fen02 fenetre = new fen02();
            fenetre.setVisible(true);
     
            }
     
        }
    Si quelqu'un voit mon erreur.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    c'est bien jolie, mais je ne vois nulle part dans ton code ou tu crée un composant graphique capable d'afficher ton histogramme ou le générer. Je te vois bien calculer des tableaux de composantes, mais je ne vois pas où tu les utilise après.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    que dois je rajouter alors? si tu as un exemple

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    trouver une manière d'afficher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int[] histoRouge = new int[256];
    int[] histoVert = new int[256];
    int[] histoBleu = new int[256];
    qui, je suppose est ton "histograme". Le plus simple est de te créer un composant histograme, dérivé de JComponent, et qui dessine dans sa méthode paint(Graphics g) l'histogramme en question.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    Tu peux me montrer comment tu ferais avec mon code pour que ça fonctionne.J"ai essayé mais j'arrive pas

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Montre:

    ce que tu as essayé et ce qu'i ne va pas dedans. Et non, je ne coderais pas de a à z un composant histogramme à ta place.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    je ne sais pas comment l'afficher

  8. #8
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    import java.awt.Graphics;
    import javax.swing.JComponent;
     
    public class Histo extends JComponent {
     
    	@Override
    	public void paint(Graphics arg0) {
    		// a toi
    	}
     
    }

  9. #9
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    C'est plutôt paintComponent(Graphics) qu'il faut overrider.
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  10. #10
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    non c'est paintComponent (sans 's')

    Sinon, d'après la javadoc, surcharger paint et paintComponent c'est presque kifkif (paintComponent n'aura pas accès au border, alors que paint à accès à toute la zone)

    public void paint(Graphics g)

    [...]
    This method actually delegates the work of painting to three protected methods: paintComponent, paintBorder, and paintChildren.
    [...] Subclasses can just override this method, as always. A subclass that just wants to specialize the UI (look and feel) delegate's paint method should just override paintComponent.

  11. #11
    Membre expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Points : 3 083
    Points
    3 083
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    non c'est paintComponent (sans 's')
    Oui c'est juste... j'ai rippé...
    Comment ça ? La réponse à ton problème n'est ni dans la faq, ni dans les tutos, ni dans sources ??? Etonnant...
    De la bonne manière de poser une question (et de répondre).
    Je ne fais pas de service par MP. Merci (...de lire les règles...).
    Ma page dvp.com

  12. #12
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    En swing (dont en héritant d'un JComponent), je pense qu'il est quand même plus approprié de redéfinir paintComponent(Graphics) .

    Un très bon tutorial balayant le procédé se trouve ici: http://java.sun.com/products/jfc/tsc...ing/index.html

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    je n'y arrive vraiment pas a l'afficher .Quelqu'un pourrait me donner un exemple ou m'aider un peu plus sur mon code

  14. #14
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Tu as des exemples dans le lien que j'ai fourni. A partir de la variable fournie en argument de la méthod paintComponent(), tu accède a un certain nombre de primitives pour dessiner (http://java.sun.com/javase/6/docs/ap.../Graphics.html).

    Pour un histogramme fillRect() est tout indiqué.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    Je vois bien comment créer des rectangles mais après j'arrive pas à les afficher dans mon code du début.

  16. #16
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    C'est un component comme un autre, tu l'ajoute à ta frame.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    voila ce que j'ai fait

    mais il ne se passe rien

    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
    public class Zone extends JComponent {
       private BufferedImage image, histogramme;
       private final int largeur = 256;
       private final int hauteur = 200;
       private Graphics2D dessin;
       private final int[] rouge = new int[256];
       private final int[] vert = new int[256];
       private final int[] bleu = new int[256];
     
       public Zone()  {
       try{
          image = ImageIO.read(new File("1a.jpg"));
          récupérerRVB();
          tracerHistogrammes();}
    	  catch (IOException ee){}}
     
     
       protected void paintComponent(Graphics surface) {
          surface.drawImage(image, 0, 0, null);   
          surface.drawImage(histogramme, (this.getWidth()-largeur)/2, (this.getHeight()-hauteur)/2, null);
       }
     
       private void récupérerRVB() {
          Raster trame = image.getRaster();
          int[] rgb = new int[3];
          int maximum = 0;
          for (int y=0; y<image.getHeight(); y++)
             for (int x=0; x<image.getWidth(); x++) {
                trame.getPixel(x, y, rgb);
                rouge[rgb[0]]++;
                vert[rgb[1]]++;
                bleu[rgb[2]]++;
             }           
       }
     
       private void tracerHistogrammes() {
          histogramme = new BufferedImage(largeur, hauteur, BufferedImage.TYPE_INT_ARGB);
          dessin = histogramme.createGraphics();
          Rectangle2D rectangle = new Rectangle2D.Double(0, 0, largeur-1, hauteur-1);
          dessin.draw(rectangle);
          dessin.setPaint(new Color(1F, 1F, 1F, 0.2F));
          dessin.fill(rectangle);      
          changerAxes();
          dessin.setPaint(new Color(1F, 0F, 0F, 0.4F));
          tracerHistogramme(rouge);
          dessin.setPaint(new Color(0F, 1F, 0F, 0.4F));
          tracerHistogramme(vert);
          dessin.setPaint(new Color(0F, 0F, 1F, 0.4F));
          tracerHistogramme(bleu);
       }
     
       private void changerAxes() {
          dessin.translate(0, hauteur);
          double surfaceImage = image.getWidth()*image.getHeight();
          double surfaceHistogramme = histogramme.getWidth()*histogramme.getHeight();
          dessin.scale(1, -surfaceHistogramme/surfaceImage/3.7);      
       }   
     
       private void tracerHistogramme(int[] couleur) {
          for (int i=0; i<255; i++) 
             dessin.drawLine(i, 0, i, couleur[i]);              
       }  
     
       public static void main(String[] argv) {
    		Zone fenetre = new Zone();
    		fenetre.setVisible(true);
    		fenetre.setSize(100,100);
     
     
    		}
    }

  18. #18
    Membre chevronné

    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Novembre 2006
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 252
    Points : 1 954
    Points
    1 954
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public static void main(String[] args) {
    		Zone fenetre = new Zone();
     
    		JFrame frame = new JFrame();
    		frame.setLayout(new BorderLayout());
    		frame.getContentPane().add(fenetre);
    		frame.setSize(100, 100);
    		frame.setVisible(true);
     
    	}

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 50
    Points : 26
    Points
    26
    Par défaut
    merci c'est gentil.
    Je me rappelé plus qu'il fallait faire comme ça

Discussions similaires

  1. erreur lors de l'affichage de l'histogramme
    Par tuunisiano dans le forum Images
    Réponses: 3
    Dernier message: 13/03/2009, 06h49
  2. Mauvais affichage sur un histogramme
    Par Mloody2000 dans le forum Langage
    Réponses: 5
    Dernier message: 27/08/2008, 19h07
  3. affichage d'un histogramme d'une matrice aleatoire
    Par boinamib dans le forum Traitement d'images
    Réponses: 8
    Dernier message: 16/05/2007, 16h12
  4. [JSP] Affichage d'un histogramme : Applet ou pas?
    Par tony_big_guy dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 16/03/2006, 08h47
  5. [MFC] Affichage d'un histogramme Excel ou autre
    Par semenzato dans le forum MFC
    Réponses: 1
    Dernier message: 14/02/2006, 11h59

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