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 ;)
Version imprimable
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 ;)
Pour un JPanel cette méthode doit pouvoir fonctionner (à vérifier quand même je viens de la taper au feeling!):
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.Code:
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; }
Tu peux facilement mettre une image dasn un JLabel....
Le nom ici étant un chemin relatif. Cette méthode marche aussi avec les chemins absolu (C:/blablabla/bliblibli/nom_de_ton_image.extension) ;)Code:JLabel image = new JLabel(new ImageIcon("nom_de_ton_image.extension"));
Mais si tu veux absolument mettre ton image dans un JPanel alors là....
Citation:
Envoyé par cysboy
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.
C'est dans la :faq:, ici.
C'est ce qu'a écrit JMLLB, à un dispose() près.
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 :
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.Code:
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; }
Si quelqu'un avait une idée ...
Barjovial
Une petite recherche t'aurais amené la réponse ^^
http://www.developpez.net/forums/d76...re-jcomponent/
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 :
J'ai également essayé avec la méthode paintComponent sans résultat.Code:
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 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
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 :roll:
Maintenant tout fonctionne correctement.