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

OpenGL Discussion :

Afficher une image avec JOGL


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut Afficher une image avec JOGL
    Bonjour,

    je souhaiterai afficher une image avec JOGL.

    J'utilise une classe image, un pixel étant un short :
    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
     
    public class Image
    {
    	private int width ; // Largeur de l'image
    	private int height ; // Hauteur de l'image
    	private int size ; // Taille totale de l'image = hauteur * largeur
    	private int maxgrey ; // Valeur maximum du niveau de gris
    	private Pixel data[][] ;
     
     
    public Image()
    	{
    	}
     
    public Image(int largeur, int hauteur)
    	{
    	setDimension(largeur, hauteur) ;
    	}
     
    public void setDimension(int largeur, int hauteur)
    	{
    	int i, j ;
    	if ( (largeur < 0) || (hauteur < 0) )
    		{
    		System.err.println("Dimensions incorrectes de l'image : " + largeur + " & " + hauteur) ;
    		return ;
    		}
    	width = largeur ;
    	height = hauteur ;
    	size = largeur * hauteur ;
    	data = new Pixel[hauteur][largeur] ;
     
    	for (i=0 ; i < hauteur ; i++)
    		for (j=0 ; j < largeur ; j++) data[i][j] = new Pixel() ;
    	}
    ....
    }
    Mais je n'arrive pas à afficher mon image à l'écran. glDrawPixel demande un ShortBuffer (java.nio.*)... J'ai donc ceci :
    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
    40
    41
     
    public class Affichages implements GLEventListener
    {
    private int TailleZoom = 100 ;
     
    public Affichages()
    	{
    	}
     
    /* init() sera appelée une fois au début de l'animation C'est dans cette méthode que nous nous chargerons de toute les opérations d'initialisation */
    /* GLEventListener renvoie un contexte (drawable) que nous allons utiliser pour instancier un objet de type GL , qui nous permettra d'utiliser
     * les fonctions OpenGL */
    public void init(GLAutoDrawable drawable) 
    	{ 
    	GL gl = drawable.getGL() ;
    	gl.setSwapInterval(1) ; /* Cette fonction permet de désactiver la syncronisation verticale, indépendement de la plateforme utilisée */
    	TailleZoom = 100 ;
    	}
     
     
     
    public void display(GLAutoDrawable drawable)
    	{
    	int i, j ;
    	GL gl = drawable.getGL() ;
    	short[] titi = new short[MasterSIS.image.getSize()] ;
    	ShortBuffer toto = null ;  
     
    // Le buffer étant à une seule dimension, je change la dimension de mon image
    	for (i=0 ; i < MasterSIS.image.getHeight() ; i++)
    		for (j=0 ; j < MasterSIS.image.getWidth() ; j++)
    			titi[i*MasterSIS.image.getWidth()+j] = MasterSIS.image.getPixel(i, j) ;
     
    	gl.glClear(GL.GL_COLOR_BUFFER_BIT) ; // clear window
    	gl.glPixelZoom((float)(TailleZoom/100.0), (float)(TailleZoom/100.0)) ;
    // J'essai d'afficher mon image dans le ShortBuffer.
    	gl.glDrawPixels(MasterSIS.image.getWidth(), MasterSIS.image.getHeight(), gl.GL_LUMINANCE16, gl.GL_UNSIGNED_SHORT, toto.wrap(titi)) ;
     
     
    	gl.glFlush(); // flush GL buffers
    	}
    Est ce que quelqu'un sait comment faire ??
    Merci par avance...
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Par défaut
    Salut,

    j'ai eu ce problème un jour.
    Je l'ai résolu en passer le buffer en ByteBuffer.
    Il semblerait que, bien que ShortBuffer, CharBuffer, etc. dérivent de ByteBuffer, JOGL n'aime que les ByteBuffer.

    J'espère que ma première participation sur Developpez.com (ça se fête ) va t'aider.

  3. #3
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    il faut crée un byte buffer de la bonne taille (donc ici, 2 fois la taille de ton shortBuffer) et utiliser la methode asShortBuffer() pour le transformer en ShortBuffer
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  4. #4
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    merci pour ces réponses, je teste ça en début d'apresm et j'écrirerai le résultat.

    Félicitation pour ta première participation... bonne continuation !!!
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  5. #5
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Par défaut
    Bonjour,

    je n'arrive pas à faire la conversion à partir de mon tableau de short titi.
    Pourriez vous m'expliquer ?
    merci...
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  6. #6
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    (attention, code non verifié mais ca doit être quelque chose comme ca )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ByteBuffer buffer = ByteBuffer.allocate(taille*2); // on multiplie par 2 car 1 short = 2 octets
    ShortBuffer toto = buffer.asShortBuffer();
    normalement, pas besoin de passer par warp()
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

Discussions similaires

  1. Afficher une image avec PHP
    Par a_zouggari dans le forum Langage
    Réponses: 2
    Dernier message: 22/04/2006, 18h02
  2. Afficher une image avec opengl
    Par kmaniche dans le forum OpenGL
    Réponses: 4
    Dernier message: 07/02/2006, 09h04
  3. Afficher une image avec swing
    Par arnonote dans le forum AWT/Swing
    Réponses: 11
    Dernier message: 07/08/2004, 12h10
  4. PL/SQL - Comment afficher une image avec HTP ?
    Par patmaba dans le forum PL/SQL
    Réponses: 2
    Dernier message: 08/07/2004, 09h28

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