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 :

[Débutant] Impossible de télécharger mon image, ImageIcon, BufferedImage


Sujet :

Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut [Débutant] Impossible de télécharger mon image, ImageIcon, BufferedImage
    Bonjour à tous,
    J'ai besoin de votre aide. En fait, je développe un jeu. J'ai déjà construis le plateau de jeu. Il est constitué de 32 cases(ovales). Au début du jeu, il doit y avoir deux billes dans chaque case. J'ai essayé de télécharger une image de bille en vain. Quand je fais print sur la largeur et la hauteur de l'image, j'ai comme résultat largeur=-1 et hauteur=-1. Voici 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
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.image.*;
    //import java.awt.Toolkit;
    class Plateau extends JPanel{
     
      public void paintComponent(Graphics g){
           super.paintComponent(g);
           int x=getWidth()/8;
    int y=getHeight()/4;
           System.out.println(x);
           System.out.println(y);
     g.setColor(Color.red);        
     g.fillRect(x,y,getHeight(),getHeight()/2);
     
     for(int j=0;j<4;j++){
     for(int i=0; i<8;i++){   
    g.setColor(Color.white);
    g.fillOval(x,y,70,70);
     
    g.translate(70, 0);
         }
       g.translate(-560,0);
    g.translate(0,70);
     } 
     ImageIcon imageIcon = new ImageIcon("Bill.jpg");
     Image image = imageIcon.getImage();
     //Toolkit toolkit = Toolkit.getDefaultToolkit();
     //Image  image=toolkit.getImage("Bille.jpg"); 
     System.out.println(image.getWidth(null));
     System.out.println(image.getHeight(null));
     
    BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null),BufferedImage.TYPE_INT_RGB );
    Graphics gg = bufferedImage.createGraphics(); 
    gg.drawImage(bufferedImage,83,141,null);
     
    }
    }
    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 072
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 072
    Points : 7 974
    Points
    7 974
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImageIcon imageIcon = new ImageIcon("Bill.jpg");
    La le programme pense par defaut que le path pour trouver "Bill.jpg" est le répértoire d'execution du programme. (donc dans sa racine). A priori ton images n'est pas la... ou est-elle placée exactement en réalité ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par wax78 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImageIcon imageIcon = new ImageIcon("Bill.jpg");
    La le programme pense par defaut que le path pour trouver "Bill.jpg" est le répértoire d'execution du programme. (donc dans sa racine). A priori ton images n'est pas la... ou est-elle placée exactement en réalité ?
    Merci Wax,
    Effectivement, je n'avais pas le fichier Bill.jpg dans le répértoire d'exécution du programme. L'image est maintenant téléchargée . J'ai les dimensions de l'image même si l'image n'apparaît pas encore.

  4. #4
    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,

    Si l'image n'apparait pas c'est parce que dans la partie ci-dessous, tu créés une nouvelle image (dans laquelle tu ne dessines rien) et tu affiches celle-là, et non pas celle que tu charges :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     Image image = imageIcon.getImage();
     //Toolkit toolkit = Toolkit.getDefaultToolkit();
     //Image  image=toolkit.getImage("Bille.jpg"); 
     System.out.println(image.getWidth(null));
     System.out.println(image.getHeight(null));
     
    BufferedImage bufferedImage = new BufferedImage(image.getWidth(null), image.getHeight(null),BufferedImage.TYPE_INT_RGB );
    Graphics gg = bufferedImage.createGraphics(); 
    gg.drawImage(bufferedImage,83,141,null);
    Il suffit de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Image image = imageIcon.getImage();
    gg.drawImage(image,83,141,null);
    A noter que tu devrais éviter de charger ton image dans la méthode paintComponent() : même si c'est très rapide (parce que ton image est locale et assez petite et que les machines sont très rapides aujourd'hui), cela prend du temps sur le thread chargé de l'affichage. Il vaut mieux toujours l'éviter, surtout que tu charges l'image à chaque fois qu'on redéssine.

    Si l'image ne change jamais, il suffit de déclarer ta variable image en static final dans la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private final static Image IMAGE = new ImageIcon("Bill.jpg").getImage();
    et dans la méthode paintComponent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gg.drawImage(IMAGE,83,141,null);
    Si l'image change, on la mettra en variable de classe, et on utilisera un WatchService pour la recharger au besoin.

    De plus, si l'image ne change jamais, tu as intérêt à l'inclure au final dans le jar (ce sera plus facile à distribuer que de devoir joindre un dossier d'images à part), donc de la mettre dans les dossiers de classes (dans le classpath), ce qui se fait facilement dans un IDE en la métant dans les mêmes dossiers que les .java, et d'y accèder par une URL, obtenur par résolution avec la méthode Class.getRessource().
    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.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Merci beaucoup Joel pour toutes ses informations, elles me sont très utiles.
    l'image est finalement apparue.
    c'est vrai que gg est issue de bufferedImage, il permet donc de dessiner sur le bufferedImage. Donc j'en avais pas besoin pour faire apparaître mon image. Si j'ai tenté d'utiliser le bufferedImage c'est dans le soucis de modofier mon image en espérant que je pouvais modifier mon image à travers le bufferedImage. En fait, j'ai une image à laquelle je veux extraire une bille et eliminer le reste de l'image. Est-ce que je peux le faire avec bufferedImage? j'ai essayé avec le logiciel paint, la tâche est difficile.

  6. #6
    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
    Oui, utiliser une BufferedImage permet de dessiner sa propre image. Si l'Image d'origine est déjà une BufferedImage (tester avec instanceof), on peut la caster et directement créer un Graphics pour dessiner dans l'image. On peut également modifier l'image en traitant directement ses rasters, ou ses pixels. Il y a d'autres moyens de modifier l'affichage d'une image sans modifier l'image (filtres, composites (masquage), etc...). Ça, c'est pour la théorie. En pratique, il faut voir la complexité de la modification. "Extraire une bille" de manière générale peut être très complexe, mais il y a de multiples cas particulier où ça peut être simple et facile (avec un ou plusieurs filtres par exemple). On peut s'aider de bibilothèque plus adaptée comme ImageJ.

    Quelles sont les caractéristiques de l'image ?
    Quelles sont les caractéristiques de la partie à extraire ? Qu'est-ce qui la différencie du reste ? Est-ce une forme géométrique avec une couleur très contrastée, ou un truc genre reconnaissance d'une bille en particulier dans une image où il y a 1000 billes mélangées ?)
    Quelle est la nécessité de l'extraire ? Est-ce pour faire un programme dédié à l'extraction (automatisable ? assisté ?) ? Est-ce pour obtenir une image utilisable à part à partir d'une image en particulier (dont on voudrais supprimer des parties non voulues), ou pour l'afficher dans une application Java ? N'est-il pas plus facile et satisfaisant de produire à nouveau la partie à extraire ?
    Quel compromis sur l'extraction (tolère-t-on de perdre quelques points ? tolère-t-on d'avoir quelques points qui ne sont pas filtrés ?) ? Quelle condition sur l'image extraite (transparente, rgb...)

    Selon les réponses à ces questions, les solutions peuvent être complètement différentes...
    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.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Oui, utiliser une BufferedImage permet de dessiner sa propre image. Si l'Image d'origine est déjà une BufferedImage (tester avec instanceof), on peut la caster et directement créer un Graphics pour dessiner dans l'image. On peut également modifier l'image en traitant directement ses rasters, ou ses pixels. Il y a d'autres moyens de modifier l'affichage d'une image sans modifier l'image (filtres, composites (masquage), etc...). Ça, c'est pour la théorie. En pratique, il faut voir la complexité de la modification. "Extraire une bille" de manière générale peut être très complexe, mais il y a de multiples cas particulier où ça peut être simple et facile (avec un ou plusieurs filtres par exemple). On peut s'aider de bibilothèque plus adaptée comme ImageJ.

    Quelles sont les caractéristiques de l'image ?
    Quelles sont les caractéristiques de la partie à extraire ? Qu'est-ce qui la différencie du reste ? Est-ce une forme géométrique avec une couleur très contrastée, ou un truc genre reconnaissance d'une bille en particulier dans une image où il y a 1000 billes mélangées ?)
    Quelle est la nécessité de l'extraire ? Est-ce pour faire un programme dédié à l'extraction (automatisable ? assisté ?) ? Est-ce pour obtenir une image utilisable à part à partir d'une image en particulier (dont on voudrais supprimer des parties non voulues), ou pour l'afficher dans une application Java ? N'est-il pas plus facile et satisfaisant de produire à nouveau la partie à extraire ?
    Quel compromis sur l'extraction (tolère-t-on de perdre quelques points ? tolère-t-on d'avoir quelques points qui ne sont pas filtrés ?) ? Quelle condition sur l'image extraite (transparente, rgb...)

    Selon les réponses à ces questions, les solutions peuvent être complètement différentes...
    Je développe un jeu auquel les joueurs vont déplacer des billes. C'est un jeu de 32 cases. Au début du jeu, le plateau apparaît avec 2 billes dans chaque case. Les joueurs devront ensuite faire leur classement où l'état initial des billes est modifié. Ensuite les joueurs vont déplacer les billes et suivant certaines règles, ils pourront capturer les billes de l'autre. Mon soucis c'est donc d'avoir ces objets billes isolés. Et la question que je me pose si les joueurs pourront bien déplacer ces billes(issues d'une photo). Il n'y a aucune condition sur l'image à extraire. J'ai aussi une autre idée c'est de considérer une bille comme étant une sphère. Cette dernière idée, je vais l'exploiter après. Avec la première idée, je trouve que j'apprends beaucoup plus de choses.

  8. #8
    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
    Il n'y aucune notion d'extraction d'image la-dedans : tu pars d'une image qui représente une bille. Tu en affiches une ou plusieurs, selon le nombre de billes. Ensuite, pour l'interaction, ça se fait à la souris.

    Et ça dépend du mode de représentation

    1. Si tu utilises un JLabel avec ImageIcon, pour afficher un bille, un écouteur sur chaque label, par exemple, suffit à distinguer le clic, et à en déplacer une à part.
    2. Si tu dessines tes billes directement dans la méthode paint d'un JPanel (ou Canvas), il te faudra simplement connaitre les positions de chacune d'entre-elles, pour les comparer avec la position du clic de la souris, pour savoir laquelle, et après tu déplaces la bille correspondante (modification de son x,y)
    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.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 47
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Il n'y aucune notion d'extraction d'image la-dedans : tu pars d'une image qui représente une bille. Tu en affiches une ou plusieurs, selon le nombre de billes. Ensuite, pour l'interaction, ça se fait à la souris.

    Et ça dépend du mode de représentation

    1. Si tu utilises un JLabel avec ImageIcon, pour afficher un bille, un écouteur sur chaque label, par exemple, suffit à distinguer le clic, et à en déplacer une à part.
    2. Si tu dessines tes billes directement dans la méthode paint d'un JPanel (ou Canvas), il te faudra simplement connaitre les positions de chacune d'entre-elles, pour les comparer avec la position du clic de la souris, pour savoir laquelle, et après tu déplaces la bille correspondante (modification de son x,y)
    Merci beaucoup Joel pour tous ces tuyaux. Je vais me lancer là dessus.

Discussions similaires

  1. Impossible de rendre mon image cliquable
    Par guillaume7684 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 01/10/2013, 23h08
  2. Impossible d'afficher mon image
    Par Olivier Regnier dans le forum Langage
    Réponses: 5
    Dernier message: 02/11/2007, 15h58
  3. Impossible de télécharger des fichiers depuis mon serveur
    Par amine55555 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 1
    Dernier message: 12/05/2007, 15h15
  4. Impossible de créer un image de mon OS
    Par Dirty Harry dans le forum Windows XP
    Réponses: 1
    Dernier message: 09/02/2007, 18h02
  5. Réponses: 19
    Dernier message: 09/09/2005, 17h44

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