Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1191 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java] comment enregistrer GLcanvas en Jpeg??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java] comment enregistrer GLcanvas en Jpeg??

n°1325819
felben86
Posté le 15-03-2006 à 14:16:42  profilanswer
 

Salut a tous, voila je suis en stage, et je travail sur unprojet qui modelise les mouvement des objet sous l'application des muscles...
Il faudrait que l'on puisse créer des films, donc a moi d'enregistrer des images à partir d'un GLcanvas...
 
J'ai tout fouiller et je voit vraiment pas...une idée?
 
Merci

mood
Publicité
Posté le 15-03-2006 à 14:16:42  profilanswer
 

n°1325953
felben86
Posté le 15-03-2006 à 16:02:25  profilanswer
 
n°1325975
Bidem
Posté le 15-03-2006 à 16:18:22  profilanswer
 


 
Hola 2 seconde, c'est pas trivial ton truc.
 
Alors je me suis penché sur le problème et apparement il n'y a pas de méthode super simple pour faire ça.
Mais voici un bout de code qui peut te servir de point de départ
 

Code :
  1. Canvas monCanvas = new Canvas();
  2. // création d'une BufferedImage
  3. BufferedImage bi = new BufferedImage(300, 100, BufferedImage.TYPE_INT_RGB);
  4. // récupération du Graphics de l'image
  5. Graphics2D graph = bi.createGraphics();
  6. // Le canvas se dessine dans le Graphics de l'image
  7. monCanvas.paint(graph);
  8. // sauver l'image ainsi obtenue au format JPEG
  9. File file = new File("test.jpg" );
  10. FileOutputStream out;
  11. out = new FileOutputStream(file);
  12. // utilisation d'un encodeur fourni dans le JDK
  13. JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  14. JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
  15. param.setQuality(1.0f, false);
  16. encoder.setJPEGEncodeParam(param);
  17. // Ecriture de l'image dans l'encodeur (qui va écrire dans le fichier)
  18. encoder.encode(bi);


 
Voici les liens dont je me suis servi pour comprendre comment ça marche
 
http://schmidt.devlib.org/java/ima [...] files.html
http://java.sun.com/docs/books/tut [...] index.html
http://java.sun.com/products/java- [...] GFlip.java

n°1325994
felben86
Posté le 15-03-2006 à 16:46:54  profilanswer
 

ouahou...
ben alors si je m'atendait a ca...Merci bcp bidem, t'as du y passer un bon bout de temps quand meme...
 
seulement, ca m'enregistre un fond tout noir.
 
PS : je l'ai pas dit mais c'est de la modélisation en 3D.....c'est grave docteur??
 
en tout cas encore merci, j'ai une piste maintenent


Message édité par felben86 le 15-03-2006 à 16:49:51
n°1326039
felben86
Posté le 15-03-2006 à 17:23:27  profilanswer
 

Aussi etrange que cela puisse etre, j'y comprend rien:
 il m'enregistre des images bizarre, genre des bout de mon bureau, des fenetre affichée, mon fond d'ecran, alors que dans les 3/4 des cas, ce sont des fenetre/icone/fond d'ecran qu'on ne voit pas pdt le test.... :pt1cable:  :pt1cable:  
 
Voila le code modifier, j'ai essayer différents truc:
 
                GraphicsConfiguration gc = myCanvas.getGraphicsConfiguration();    
     BufferedImage bimg = gc.createCompatibleImage(myCanvas.getWidth(), myCanvas.getHeight());  
     Graphics2D graph = bimg.createGraphics();
     myCanvas.paint(graph);
     File file = new File("test.jpg" );
     FileOutputStream out;      
     try{ImageIO.write(bimg, "jpg", new File("sdfgs" ));}
     catch(Exception e) { e.getStackTrace(); }
     
     try
     { out = new FileOutputStream(file);
         JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
         JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bimg);
         param.setQuality(1.0f, false);
         encoder.setJPEGEncodeParam(param);
         encoder.encode(bimg);  
     }
     catch(Exception e) { e.getStackTrace(); }

n°1326063
felben86
Posté le 15-03-2006 à 17:48:07  profilanswer
 

up

n°1326072
Bidem
Posté le 15-03-2006 à 17:57:14  profilanswer
 

Je serais tenté de dire que c'est la façon dont tu récupères la BufferedImage à partir d'un GraphicsConfiguration.
 
Es-tu sur que myCanvas a une GraphicsConfiguration juste pour lui ou est-ce qu'il récupère la config de son parent.
 
Pour savoir ça il faut faire des affichages (gc.getDevice(). ... getBounds())
 

n°1326250
felben86
Posté le 15-03-2006 à 22:08:17  profilanswer
 

euh...
J'ai essayer avec ta facon, ca me donne des images toutes noires....et en me balladant, j'ai trouver ces  GraphicsConfiguration, je ne sais pas du tout ce que c'est, j'ai laisser le projet au boulot, donc je pourrait tester que demain....
 
Que doit me donner gc.getDevice()?

n°1326463
Kyle_Katar​n
Posté le 16-03-2006 à 08:43:01  profilanswer
 

tu fait de l'openGL avec JOGL ?

n°1326480
felben86
Posté le 16-03-2006 à 09:13:26  profilanswer
 

Je sais que je fait du jogl, parceque j'ai mis une heure a faire tourner le pgrm sous linux, a cause de ca, mais apres openGL, j'en sais rien....
Je suis juste stagiaire, c'est pas moi qui ait coder les 20Mo de pure ligne, lol..
Ce projet permet de voir en 3D la déformation objets (tracés avec des points et des traits) lorsque les muscles qui y sont attachés se contractent avec un niveau choisit en temps réel.
 
Mon but était de créer les outils permettant de mesurer avec précision ces amplitudes( génération de graphes + génération de fichier matlab), ce que j'ai fait avec grand succès.
 
Maintenant on me demande de faire de sorte que l'on puisse créer un vidéo....
 Donc je commence d'abord par apprendre a faire des jpeg, car il exsiste apres des outils de creation de video avec ces dernier.
 
Sinon pour revenir au debut, openGL ou pas, j'en sais rien:
 - Le seul endroit ou j'ai ca d'ecrit dans le projet c'est dans une seuledes dizaine de classe:
 
/**
  * Set texture mode. Mode is one of these values:
  * PolygonalMesh.GL_DECAL, PolygonalMesh.GL_REPLACE,
  * PolygonalMesh.GL_MODULATE, PolygonalMesh.GL_BLEND See openGL docs
  * for the meaning.
  *
  * @param textureMode texture mode
  * @see #getTextureMode
  */
 
Celle ci comme vous puvez vous en douter permet de tracer les différents traits entre les points....je crois

mood
Publicité
Posté le 16-03-2006 à 09:13:26  profilanswer
 

n°1326481
felben86
Posté le 16-03-2006 à 09:15:19  profilanswer
 

Voila ce que me retourne  System.out.println(gc.getDevice());
 
   "X11GraphicsDevice[screen=0]"

n°1326482
Kyle_Katar​n
Posté le 16-03-2006 à 09:15:38  profilanswer
 

Tu pourrais me dire comment tu arrives à faire marcher des textures avec JOGL ? car là sur notre projet on galère depuis plusieurs semaines sans succès ....

n°1326485
Kyle_Katar​n
Posté le 16-03-2006 à 09:17:28  profilanswer
 

Bidem a écrit :

Je serais tenté de dire que c'est la façon dont tu récupères la BufferedImage à partir d'un GraphicsConfiguration.
 
Es-tu sur que myCanvas a une GraphicsConfiguration juste pour lui ou est-ce qu'il récupère la config de son parent.
 
Pour savoir ça il faut faire des affichages (gc.getDevice(). ... getBounds())


 
Toi qui à l'air de bien gérer Jogl ... tu pourrais m'aider pour le soucis de textures évoqué ?

n°1326488
felben86
Posté le 16-03-2006 à 09:25:44  profilanswer
 

Voila, le gc.getBounds() me retourne les dimension de l'ecran je croit:
 
java.awt.Rectangle[x=0,y=0,width=1152,height=864]
 
Au lien de 500/473 pour mon canvas

n°1326527
Bidem
Posté le 16-03-2006 à 10:41:05  profilanswer
 

Kyle_Katarn a écrit :

Toi qui à l'air de bien gérer Jogl ... tu pourrais m'aider pour le soucis de textures évoqué ?


 
J'y connais rien en Jogl  :pt1cable:
 
ici le problème ce n'est pas jogl mais purement awt.
 

Citation :

Voila, le gc.getBounds() me retourne les dimension de l'ecran je croit:
 
java.awt.Rectangle[x=0,y=0,width=1152,height=864]
 
Au lien de 500/473 pour mon canvas


 
Là je sèche.
 
Il va falloir que tu comprennes comment interagissent le GraphicsConfiguration, la BufferedImage et la méthode paint du Canvas.
 
Et là, pas de miracle, il faut lire et comprendre la javadoc et/ou trouver plus d'info sur le net.

n°1326529
Kyle_Katar​n
Posté le 16-03-2006 à 10:43:30  profilanswer
 

oups

n°1326533
felben86
Posté le 16-03-2006 à 10:49:17  profilanswer
 

okay ca roule, en tout cas, je remercie beaucoup...
A bientot :hello:

n°1326597
felben86
Posté le 16-03-2006 à 12:21:46  profilanswer
 

ouais ben la je galere comme un port, j'essaye un peut tout, et ca me donne rien

n°1327180
Trollable
Posté le 17-03-2006 à 09:52:48  profilanswer
 

Pas possible. Ton contexte OGL n'est pas gere par Java.
Ca sera possible dans le futur 1.6 (je crois d'ailleurs que c'est deja code a partir de la b57, a verifier)


---------------
The Million Dollar Screenshot  (seo v7ndotcom elursrebmem paesys wifi)
n°1327194
felben86
Posté le 17-03-2006 à 10:04:36  profilanswer
 

ah ouais, tu a l'air de bien connaitre le theme eh...
Donc bon, ben je vais passer par aurte chose....
Merci de l'infos, je vais le dire a mon tuteur que je vois tout a l'heure, qu'il s'arache pas els cheveux pendant des heures...
 
A +

n°1328616
felben86
Posté le 20-03-2006 à 09:08:56  profilanswer
 

resalut, dsl de pas avoir rep avant.
J'ai testé java 1.6, et toujours le même probleme, tant pis, ce sera pour plus tard...

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java] comment enregistrer GLcanvas en Jpeg??

 

Sujets relatifs
API Google en JavaJava studio creator 2
Probleme Java ou Fai?java VRML
urgence pour projet du jeu de hex en java[Java/Swing] Combo avec interrupteurs
Les pointeurs en JavaExplorateur de fichiers en java
Lancer navigateur web à partir d'un programme java[Java/Jdom] Copie d'un element vers un nouveau document
Plus de sujets relatifs à : [Java] comment enregistrer GLcanvas en Jpeg??


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR