[Java] comment enregistrer GLcanvas en Jpeg??

comment enregistrer GLcanvas en Jpeg?? [Java] - Java - Programmation

Marsh Posté le 15-03-2006 à 14:16:42    

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

Reply

Marsh Posté le 15-03-2006 à 14:16:42   

Reply

Marsh Posté le 15-03-2006 à 16:02:25    

Reply

Marsh Posté le 15-03-2006 à 16:18:22    


 
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

Reply

Marsh Posté le 15-03-2006 à 16:46:54    

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
Reply

Marsh Posté le 15-03-2006 à 17:23:27    

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(); }

Reply

Marsh Posté le 15-03-2006 à 17:48:07    

up

Reply

Marsh Posté le 15-03-2006 à 17:57:14    

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())
 

Reply

Marsh Posté le 15-03-2006 à 22:08:17    

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()?

Reply

Marsh Posté le 16-03-2006 à 08:43:01    

tu fait de l'openGL avec JOGL ?

Reply

Marsh Posté le 16-03-2006 à 09:13:26    

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

Reply

Marsh Posté le 16-03-2006 à 09:13:26   

Reply

Marsh Posté le 16-03-2006 à 09:15:19    

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

Reply

Marsh Posté le 16-03-2006 à 09:15:38    

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 ....

Reply

Marsh Posté le 16-03-2006 à 09:17:28    

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é ?

Reply

Marsh Posté le 16-03-2006 à 09:25:44    

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

Reply

Marsh Posté le 16-03-2006 à 10:41:05    

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.

Reply

Marsh Posté le 16-03-2006 à 10:43:30    

oups

Reply

Marsh Posté le 16-03-2006 à 10:49:17    

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

Reply

Marsh Posté le 16-03-2006 à 12:21:46    

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

Reply

Marsh Posté le 17-03-2006 à 09:52:48    

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)
Reply

Marsh Posté le 17-03-2006 à 10:04:36    

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 +

Reply

Marsh Posté le 20-03-2006 à 09:08:56    

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...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed