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 :

[JPanel] Convertir un drawingArea ou JPanel en Image


Sujet :

AWT/Swing Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [JPanel] Convertir un drawingArea ou JPanel en Image
    Bonjour à tous,

    Je voudrais savoir si il est possible de convertir un drawingArea en une image pour "Exporter" un graphique que je realise dans mon appli.

    Merci à celui qui connait la réponse et à ceux qui lise ce post

  2. #2
    Membre actif
    Avatar de JMLLB
    Inscrit en
    Septembre 2006
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 285
    Points : 268
    Points
    268
    Par défaut
    Pour un JPanel cette méthode doit pouvoir fonctionner (à vérifier quand même je viens de la taper au feeling!):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public BufferedImage genererImage(){
      BufferedImage bImage= new BufferedImage(this.getWidth(),this.getHeight(),BufferedImage.TYPE_INT_RGB);
      Graphics2D g2D= (Graphics2D) bImage.getGraphics();
      this.paint(g2D);
    return bImage;
    }
    Pour un drawingArea je ne garantis rien, mais si, comme je le pense il implémente les méthodes paint, getWidth et getHeight il n'y a pas de raison que ça ne fonctionne pas.
    S'il n'y a pas de solutions, il n'y a pas de problème.

  3. #3
    Membre habitué Avatar de cysboy
    Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    221
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 221
    Points : 168
    Points
    168
    Par défaut
    Tu peux facilement mettre une image dasn un JLabel....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JLabel image = new JLabel(new ImageIcon("nom_de_ton_image.extension"));
    Le nom ici étant un chemin relatif. Cette méthode marche aussi avec les chemins absolu (C:/blablabla/bliblibli/nom_de_ton_image.extension)

    Mais si tu veux absolument mettre ton image dans un JPanel alors là....

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [drawingArea] Convertir un drawingArea ou JPanel en Image
    Citation Envoyé par cysboy
    Tu peux facilement mettre une image dasn un JLabel....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JLabel image = new JLabel(new ImageIcon("nom_de_ton_image.extension"));
    Le nom ici étant un chemin relatif. Cette méthode marche aussi avec les chemins absolu (C:/blablabla/bliblibli/nom_de_ton_image.extension)

    Mais si tu veux absolument mettre ton image dans un JPanel alors là....

    En fait je veux pas mettre une image dans un JPanel, je veux creer une image de mon JPanel. JMLLB m'a donner une solution je vais la tester.

  5. #5
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    C'est dans la , ici.

    C'est ce qu'a écrit JMLLB, à un dispose() près.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    Je rebondis sur ce vieux post car j'ai le même souci.

    Je souhaite transformer un JPanel en image. J'utilise pour cela la méthode d'écrite dans la FAQ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public Image getImage(Component component){
       if(component==null){return null;}
       int width = component.getWidth();
       int height = component.getHeight();
       BufferedImage image = new BufferedImage(width, height, 
                                                 BufferedImage.TYPE_INT_RGB);
       Graphics2D g = image.createGraphics();
       component.paintAll(g);
       g.dispose();
       return image;
    }
    mais l'image générée est noire. Le seul moyen que j'ai trouvé pour obtenir l'image du JPanel est de d'abord afficher le Jpanel dans une frame puis d'utiliser la méthode et enfin fermer la frame. Ce qui n'est pas géniale comme solution.

    Si quelqu'un avait une idée ...


    Barjovial

  7. #7
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Une petite recherche t'aurais amené la réponse ^^
    http://www.developpez.net/forums/d76...re-jcomponent/
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Salut,

    Merci pour ta réponse, j'ai pourtant pas mal cherché mais visiblement pas avec les bons critères.

    Cependant cela ne fonctionne pas encore complètement. Le panel que je souhaite transformer en image est composé de plusieurs JPanel qui contiennent des JComponents.

    En utilisant le doLayout sur le contentPane de la JWindow le premier panel ainsi que les sous panels sont affichés mais pas les JComponents des sous panel.

    En utilisant le paintAll au lieu de paint l'image redevient noire.

    Voici le code que j'utilise :

    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
    private static Image getImage(JPanel panel){
     
    		JWindow jwindow = new JWindow();
    		jwindow.setContentPane(panel);
    		jwindow.pack();
    		jwindow.doLayout();
    		jwindow.validate();
     
    		int width = panel.getWidth();
    		int height = panel.getHeight();
     
    		BufferedImage image = new BufferedImage(width, height, 
    				BufferedImage.TYPE_INT_RGB);
    		Graphics2D g = image.createGraphics();
    		jwindow.getContentPane().paintAll(g);
     
    		g.dispose();
    		jwindow.dispose();
    		return image;
    	}
    J'ai également essayé avec la méthode paintComponent sans résultat.

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    J'ai continué à chercher mais je ne vois pas pourquoi les JComponents ne sont pas affichés !

    Pourtant quand j'affiche la jwindow tout est bien affiché. J'ai également essayé de faire doLayout sur les sous panels mais cela ne change rien.

    Si quelqu'un avait une idée cela me débloquerais bien !!

    Barjovial

  10. #10
    Membre à l'essai
    Inscrit en
    Janvier 2008
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Salut,

    J'ai trouvé d'ou venait le problème :
    je surchargeais la méthode paint au lieu de la méthode paintComponent pour les sous panels

    Maintenant tout fonctionne correctement.

Discussions similaires

  1. [JPanel] suppression définitive d'un JPanel
    Par Flophx dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 22/11/2006, 10h38
  2. Réponses: 3
    Dernier message: 06/03/2006, 18h08
  3. Convertir un Graphics g en une image
    Par MeDioN dans le forum 2D
    Réponses: 2
    Dernier message: 10/01/2006, 09h27
  4. [C#] Convertir un tableau de byte en Image
    Par goulhasch dans le forum ASP.NET
    Réponses: 4
    Dernier message: 24/01/2005, 10h12

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