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

 Java Discussion :

Image dans un JPanel


Sujet :

Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Par défaut Image dans un JPanel
    Bonjour à tous,

    J'ai créé un JPanel qui contient lui même 2 JPanel
    * un qui contient JLabel "Choisissez une image" et un bouton qui permet de parcourir le disque dur pour choisir une image.
    * un qui contient un JLabel qui va afficher l'image choisie.

    Le problème c'est que le deuxième JLabel n'affiche pas les images bmp 1bit par pixel, il n'affiche que les images "jpeg","png",..

    Pouvez vous m'aider à comprendre ce problème.
    Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    un qui contient un JLabel qui va afficher l'image choisie
    y-a-t-il une raison particulière pour afficher l'image dans un JLabel au lieu de l'afficher directement dans le JPanel ?
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  3. #3
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Salut,

    peux tu donner l’instruction que tu as utilisé pour lire l'image sur le disque dur ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    y-a-t-il une raison particulière pour afficher l'image dans un JLabel au lieu de l'afficher directement dans le JPanel ?
    Bonjour Népomucène,

    En effet, j'ai pas pu afficher l'image directement sur le JPanel donc j'ai utilisé un JLabel.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Par défaut
    Citation Envoyé par slim_java Voir le message
    Salut,

    peux tu donner l’instruction que tu as utilisé pour lire l'image sur le disque dur ?
    Bonjour slim_java,

    J'ai utilisé ce code
    public void openFile() {
    JFileChooser jfc = new JFileChooser();
    int result = jfc.showOpenDialog(this);
    if(result == JFileChooser.CANCEL_OPTION) return;
    try {
    File file = jfc.getSelectedFile();
    BufferedReader br = new BufferedReader(new FileReader(file));
    String s=""; int c=0;
    while((c=br.read())!=-1) s+=(char)c;
    br.close(); jep.setText(s);
    } catch (Exception e) {
    JOptionPane.showMessageDialog(this,e.getMessage(),
    "File error",JOptionPane.ERROR_MESSAGE);}
    }

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Alors là, java m'étonnera toujours :
    afficher une image stockée dans une chaîne en passant par un JLabel

    Je serais curieux de savoir où tu as péché ce code

    Sinon le code simpliste pour afficher une image venant d'un fichier en fond de JPanel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
             public void paintComponent(Graphics g) {
                    java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
                    Image image = toolkit.getImage("fichier");
                    g.drawImage(image ,0,0,null);
            }
    pas très optimisé car en principe on devrait charger le fichier en dehors de paintComponent mais bon, pour commencer ...

    Plus de précision dans la FAQ
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Alors là, java m'étonnera toujours :
    afficher une image stockée dans une chaîne en passant par un JLabel

    Je serais curieux de savoir où tu as péché ce code

    Sinon le code simpliste pour afficher une image venant d'un fichier en fond de JPanel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
             public void paintComponent(Graphics g) {
                    java.awt.Toolkit toolkit = java.awt.Toolkit.getDefaultToolkit();
                    Image image = toolkit.getImage("fichier");
                    g.drawImage(image ,0,0,null);
            }
    pas très optimisé car en principe on devrait charger le fichier en dehors de paintComponent mais bon, pour commencer ...

    Plus de précision dans la FAQ
    Oui, mais je peux utilisé ce code dans une classe qui hérite de JPanel et contient qu'un seul JPanel n'est ce pas?

    sinon, ou est ce qu'on peux précisé sur quel JPanel des deux on veux afficher l'image.

    Merci pour ton aide.

  8. #8
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Oui, mais je peux utilisé ce code dans une classe qui hérite de JPanel et contient qu'un seul JPanel n'est ce pas?
    Il faut créer une classe "JPanelPerso" héritant de JPanel dans laquelle tu surcharges la méthode paintComponent

    après, c'est c'est ce JPanelPerso que tu ajoutes à ton JPanel principal.
    (dans Swing tu peux imbriquer autant de JPanel que tu veux)
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  9. #9
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par ayson Voir le message
    Bonjour slim_java,

    J'ai utilisé ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public void openFile() {
    JFileChooser jfc = new JFileChooser();
    int result = jfc.showOpenDialog(this);
    if(result == JFileChooser.CANCEL_OPTION) return;
    try {
    File file = jfc.getSelectedFile();
    BufferedReader br = new BufferedReader(new FileReader(file));
     
    ...
    }


    Salut,
    pour lire une image, il faut utiliser la classe ImageIO.
    Cette classe choisit un lecteur approprié, en fonction du type de fichier (.jpg, .bmp,.gif,...)

    donc comme instruction de lecture d'image, tu dois faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BufferedImage monImage  = ImageIO.read(fichierImage);

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Par défaut
    Ok j'ai essayer d'afficher l'image dans un JPanel au lieu du JLabel ça fonctionne maintenant. Mais mon problème résiste encore. En fait il affiche tout type d'image sauf les image bmp 1bit/pixel est moi j'ai besoin de ce type d'image.

  11. #11
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par ayson Voir le message
    Ok j'ai essayer d'afficher l'image dans un JPanel au lieu du JLabel ça fonctionne maintenant. Mais mon problème résiste encore.
    Oui c'est normal car ton problème ne provient pas de l'utilisation d'un JLabel ou un JPanel.
    je t'ai donné l'instruction qui permet de lire tout type d'image dans mon dernier post.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Par défaut
    J'ai essayé ça mais toujours le même problème il lit bien l'image et affiche son path mais il n'affiche pas toujours bmp 1bit/pixel.
    int result = jfc.showOpenDialog(new JPanel());
    if (result == JFileChooser.CANCEL_OPTION)
    return;
    try {

    File fil = getSelectedFile();
    BufferedImage monImage = ImageIO.read(fil);
    String url = fil.getAbsolutePath();
    imageJlb.setText(url);
    imageJlb.validate();
    imageJlb.updateUI();

  13. #13
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut


    Essayer la lecture avec cette méthode:

    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
    public  Image readBMP(String filename) {
        try{
          DataInputStream inBMP = new DataInputStream(new FileInputStream(filename));
     
          //On va lire le début de l'entête
          inBMP.skipBytes(18);
     
          // on lit la largeur et la hauteur de l'image
          int width = readInt(inBMP);      
          int height = readInt(inBMP);
     
          //On saute les données inutiles del'entête
          inBMP.skipBytes(28);
     
          //Nous allons remplir le BufferedImage
          BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
          int sup = (width * 3) % 4;
     
          //Lecture des données
          for(int y = height - 1; y >= 0; y--){
             for(int x = 0; x < width; x++){
               //Récupération des couleurs
               img.setRGB(x, y, readColor(inBMP));
             }
     
             //On saute le bourrage
             inBMP.skipBytes(sup);
           }
     
          inBMP.close();
          return (Image)img;
        }
        catch(Exception e){
          return null;
        }
      }

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Par défaut
    Ok je vais essayé ce code mais je veux juste savoir comment je définie les méthodes readInt() et readColor()?

  15. #15
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par ayson Voir le message
    Ok je vais essayé ce code mais je veux juste savoir comment je définie les méthodes readInt() et readColor()?
    désolé

    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
    /**Méthode permettant de lire un entier dans un fichier BMP
       * @param in Flux d'entrée
       * @return Entier lu*/
      private static int readInt(DataInputStream in){
      	byte[] b = new byte[4];
      	int result = 0;
     
      	try{
      		in.read(b);
      		result = b[0] & MASK;
      		result = result + ((b[1] & MASK) << 8);
      		result = result + ((b[2] & MASK) << 16);
      		result = result + ((b[3] & MASK) << 24);
     
      	}
        catch(Exception e){
     
        }
     
        return result;
      }
     
      /**Méthode permettant de lire une "couleur" dans un fichier BMP
       * @param in Flux d'entrée
       * @return Entier lu*/
      private static int readColor(DataInputStream in){
      	byte[] b = new byte[3];
      	int result = 0;
     
      	try{
      		in.read(b);  		
      		result = b[0] & MASK;
      		result = result + ((b[1] & MASK) << 8);
      		result = result + ((b[2] & MASK) << 16);
      	}
        catch(Exception e){
     
        }
     
        return result;
      }

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Par défaut
    Merci pour votre aide.
    Et la variable MASK prend qu'elle valeur?

  17. #17
    Membre Expert
    Avatar de slim_java
    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2008
    Messages
    2 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2008
    Messages : 2 272
    Par défaut
    Citation Envoyé par ayson Voir le message
    Merci pour votre aide.
    Et la variable MASK prend qu'elle valeur?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private static final int MASK = 0xFF;/**Constante de masque pour la comparaison bit à bit*/
    je vais chercher tous le code et le mettre ici

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 15
    Par défaut
    Je vous remercie.

    En faite maintenant il m'affiche quelque chose, Il remplie le JPanel en bit Noir donc une convertie tout les bit en noir normalement,bon c'est mieux que rien!

    Je vais essayé de trouver le problème.


Discussions similaires

  1. Image dans un Jpanel
    Par fontaigo dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 19/04/2006, 18h13
  2. comment afficher une image dans un jpanel ?
    Par 180degrés dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 18/04/2006, 15h33
  3. Persistance d'une image dans un JPanel
    Par Robiwan59 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 15/02/2006, 19h20
  4. Rafraichir image dans un jPanel
    Par kentao dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 02/01/2006, 16h31
  5. [JPanel]Mettre une image dans un JPanel
    Par ehmppowa dans le forum Composants
    Réponses: 11
    Dernier message: 30/11/2005, 20h17

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