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 :

Capture bitmap...


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Par défaut Capture bitmap...
    Bonjour,
    j'ai un petit probleme avec les captures bitmap, en utilisant la fonction glReadPixels.
    Il arrive, lorsque mon objet (j'ai qu'un object dans la scene) sort du cadre (et n'est plus rendu completement), que la méthode glReadPixels renvoie plus de pixels que normalement. Et lorsque je rajoute l'entete BMP pour la visualiser, l'image "glisse" sur certaines lignes... Un decalage de quelques pixels, sur plusieurs lignes (et des fois, des couleurs etranges, mais c'est plus rare). L'autre probleme, c'est qu'il arrive que cela fonctionne même quand l'object est hors du cadre. Donc pas très facile à deboguer.
    Je cherche un moyen d'eviter ca. Soit en modifiant les parametre de glReadPixels, soit en empechant mon objet de sortir du cadre, mais je n'arrive pas touver un fonction qui revoit les positions relatives des objets de la scene afin de broquer les mouvements lorsque l'on se rapporche des limites.

    Merci d'avance.

  2. #2
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    que la méthode glReadPixels renvoie plus de pixels que normalement


    Ton problème semble être un problème classique de manipulation d'images avec une taille en largeur mal définie, ou un pointeur qui saute où il ne faut pas.

    Je pense qu'il faut que tu nous montres un bout de code si tu veux qu'on t'aide... sinon cela va être dur dur.

    Si tu peux nous montrer la partie glReadPixels + la partie sauvegarde de ton image dans un fichier et la partie conversion en bmp, cela devrait nous aider

  3. #3
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Par défaut
    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
          if ( ( (tampon = malloc(640*480*3)) == NULL ) || ( (entete = malloc(54)) == NULL ) ) 
             { 
             printf("Erreur allocation...\n"); 
             break; 
             } 
     
          glPixelStorei (GL_UNPACK_ALIGNMENT, 1); 
          glReadPixels (0, 0, 640, 480, GL_RGB, GL_UNSIGNED_BYTE, tampon); 
     
          capture = fopen("E:\\entete.dat","r"); 
          fread(entete,1,54,capture); 
          fclose(capture); 
     
          capture = fopen("E:\\capture.bmp","w"); 
          fwrite(entete,1,54,capture); 
          fwrite(tampon,1,640*480*3,capture); 
          fclose(capture); 
     
          free(tampon);
    Voila...

  4. #4
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Bon bah c'est clair et concis... je vois pas d'erreur. Le seul truc qui me "gène" c'est ton entête, où tu fais un copier collé... entete.dat est bien généré ?

    http://stielec.ac-aix-marseille.fr/cours/abati/bmp.htm

    Aucune méthode de compression n'est initilisé dans l'entête ?
    La taille et le nombre de couleur sont les bonnes données ?

  5. #5
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Par défaut
    Tout semble ok. Et ca marche dans 98% des cas. Les problemes arrivent quand l'objet sort du champs et n'est plus completement rendu. Et encore des fois, mais hors du champs ca marche.
    Le fichier en-tete est correct.

    L'autre solution serait de détecter quand un mouvement fait sortir l'objet du champs et ne pas effectuer le mouvement. Mais pour ca, j'arrive pas trouver les fonctions qui vont bien.

  6. #6
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Hum, c'est vraiment bizarre ton problème... sinon cela pourrait être un problème de drivers si cela vient pas du code, tu as essayé de mettre à jour ton drivers de carte graphique ?

  7. #7
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Par défaut
    Non... Mais dans la fenetre openGL, tout ce passe bien. C'est au moment du glReadPixels qu'il arrive que le buffer déborde. C'est pour ca que je ne me pose pas de question sur le driver de ma carte graphique.

  8. #8
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    glReadPixels fait partie des fonctions mappé par ta carte graphique, même si c'est pas une fonction 3D, elle va lire les information qui sont stocké dans le buffer de ta carte graphique. Donc il suffit d'une mauvaise implémentation. C'est vraiment bizarre ton problème quand même. A moins que tu ne fasses du software buffer, un rendu dans une bitmap, et que lorsque tu manipules ta bitmap quelque part tu génères un décalage.

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Par défaut
    Peux-tu nous montrer l'image générer ?

  10. #10
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Par défaut
    Je n'ai pas de site ou je peux deposer une image...
    Quelqu'un à une idée???

  11. #11
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Par défaut
    Pour la piste de la carte graphique, je viens de faire le test sur une autre machine (plus ancienne, système d'exploitation different, carte graphique differente...), le probleme est toujours la et présente les mêmes déformations...

  12. #12
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Par défaut
    Voila la solution à mon probleme :
    Avant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    capture = fopen("E:\\capture.bmp","w");
    Apres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    capture = fopen("E:\\capture.bmp","wb");
    Désolé de vous avoir déranger avec un probleme en carton...
    Encore merci pour vos aides.

    Par contre, dans une image BMP, il semblerai que les couleurs de chaque point sont décrite dans l'ordre BGR et non pas RGB. Normal?

  13. #13
    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
    oui c'est normal, c'est le format qui veut ca...
    * 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

  14. #14
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 30
    Par défaut
    Citation Envoyé par bafman
    oui c'est normal, c'est le format qui veut ca...
    C'est toujours "normal" et surtout beaucoup plus simple avec la solution...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Capturer un event sur une image bitmap
    Par LordSpartacus dans le forum wxPython
    Réponses: 1
    Dernier message: 04/11/2007, 22h33
  2. [VB.NET] Redimensionner Bitmap d'une capture d'écran
    Par HULK dans le forum Windows Forms
    Réponses: 2
    Dernier message: 17/01/2006, 11h31
  3. Pb Lecture de bitmap monochrome
    Par Loïc38 dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/07/2002, 18h24
  4. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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