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 :

Chargement de .BMP via méthode perso, problème d'affichage avec certains fichiers?


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : août 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut Chargement de .BMP via méthode perso, problème d'affichage avec certains fichiers?
    Salut à tous !!

    Je ne sais pas si mon post a sa place ici, mais voila mon problème :

    J'ai décidé de me documenter un peu et de me faire mes propres méthodes de chargement de fichier .BMP pour le chargement de texture OpenGL, car j'utilise initialement la bibliothèque SDL pour ces routines là, et j'aimerais m'en séparer.

    Jusqu'à présent, je ne cherches qu'à charger des images en 24bits (les 256 couleurs etc seront une fois que j'aurais réglé mon souci), du coup, je n'ai à priori pas à faire usage des palettes RGBQUAD.

    De manière générale, le chargement fonctionne sur la quasi totalité des images que j'essaye de charger, mais pour une raison que j'ignore, il demeure certains fichiers qui une fois chargés s'affichent n'importe comment.
    Voila le résultat:


    Comme vous pouvez le voir, l'herbe, ainsi que les petits personnages s'affichent correctement, tandis que le carré buggé, et ce qui est censé être un logo en bas à droite ne s'affichent pas correctement, pourtant ils utilisent les mêmes méthodes pour le chargement.

    Au début j'ai pensé au BitCount, mais ces fichiers fautifs sont comme ceux qui fonctionnent, ça veux dire en 24bits, de même pour la résolution, 72ppp.
    Du coup, j'ai tenté de copier-coller l'intégralité, ou une toute petite portion du fichier fautif dans un fichier vierge, pensant qu'il pouvait être corrompu (et encore?), mais rien à faire le problème persiste sans que je n'en comprenne la raison.

    Bref, je ne vois pas trop d'où ça pourrait venir; que ce soit une erreur dans mon code, ou un oubli d'un élément important.

    Sachant que ma routine de chargement de texture fonctionne depuis le début, et vu les différents tests que j'ai fait, j'en ai conclu que ce n'était pas là le problème, mais bien au niveau du chargement du BMP, voici donc mon code (je code en C++, mais j'ai fait usage des flux C, beaucoups plus rapides pour écrire dans un bloc mémoire avec fread)

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    #include <stdio.h>
    using namespace std;
     
    #pragma pack(push, 1)
     
    ///Header de fichier du BITMAP
    struct BITMAPFILEHEADER
    {
        unsigned short bfType;
        unsigned int bfSize;
        unsigned short bfReserved1;
        unsigned short bfReserved2;
        unsigned int bfOffBits;
    };
     
    ///Header d'information du BITMAP
    struct BITMAPINFOHEADER
    {
        unsigned int biSize;
        unsigned int biWidth;
        unsigned int biHeight;
        unsigned short biPlanes;
        unsigned short biBitCount;
        unsigned int biCompression;
        unsigned int biSizeImage;
        unsigned int biXPelsPerMeter;
        unsigned int biYPelsPerMeter;
        unsigned int biClrUsed;
        unsigned int biClrImportant;
    };
     
    ///Couleur de palette colorimétrique
    struct RGBQUAD
    {
        unsigned char rgbBlue;
        unsigned char rgbGreen;
        unsigned char rgbRed;
        unsigned char rgbReserved;
    };
     
    ///Pixel de BITMAP
    struct PIXEL
    {
        unsigned char b;
        unsigned char g;
        unsigned char r;
    };
     
    struct BITMAP
    {
        ///Membres de structure
        BITMAPFILEHEADER bitmapfileheader;
        BITMAPINFOHEADER bitmapinfoheader;
        PIXEL** bitmaparray;
     
        ///Constructeur
        BITMAP(const char* f)
        {
            ///Ouverture du fichier et lecture des fichiers d'en tête
            FILE* file = NULL;
            file = fopen(f,"r");
            fread(&bitmapfileheader,sizeof(BITMAPFILEHEADER),1,file );
            fread(&bitmapinfoheader,sizeof(BITMAPINFOHEADER),1,file );
     
            ///Plaçage du curseur au début des données pixel
            fseek ( file, bitmapfileheader.bfOffBits , SEEK_SET );
     
            ///Création du tableau de donnée pixel
            bitmaparray = new PIXEL*[bitmapinfoheader.biWidth];
                for(int i=0; i<bitmapinfoheader.biWidth ; i++)
                    bitmaparray[i]= new PIXEL[bitmapinfoheader.biHeight];
     
            ///Copie et remplissage du tableau de donnée pixel
            for(int h=0; h<bitmapinfoheader.biHeight; h++)
                for(int w=0; w<bitmapinfoheader.biWidth; w++)
                        fread(&bitmaparray[w][h],sizeof(PIXEL),1,file );
     
            ///Fermeture du fichier, et libération des ressources temporaires
            fclose(file);
        }
    };
    #pragma pack(pop)
    Si jamais vous avez une question ou avez besoin d'un renseignement supplémentaire, n'hésitez pas

    Sur ce, merci d'avance pour votre aide !!

  2. #2
    Expert éminent
    Avatar de raptor70
    Inscrit en
    septembre 2005
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : septembre 2005
    Messages : 3 173
    Points : 6 811
    Points
    6 811
    Mes Tutos DirectX, OpenGL, 3D : http://raptor.developpez.com/

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    août 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : août 2007
    Messages : 13
    Points : 7
    Points
    7
    Par défaut
    Salut raptor70

    Merci pour le lien , et non je n'avais pas vu ça;
    Vais voir ça tout de suite !

Discussions similaires

  1. [Excel 2010] Projet perso, problème de combinaison avec listes.
    Par MoneyCivius dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/04/2014, 15h00
  2. VS 2008 problème d'affichage avec connexion via un dataset
    Par robertopowa dans le forum Débuter
    Réponses: 1
    Dernier message: 20/04/2010, 07h14
  3. Problème d'affichage avec le méthode toString()
    Par Premium dans le forum Langage
    Réponses: 8
    Dernier message: 26/10/2006, 11h36
  4. Réponses: 6
    Dernier message: 19/10/2004, 13h46
  5. Problème d'affichage avec trace
    Par WriteLN dans le forum Flash
    Réponses: 10
    Dernier message: 22/10/2003, 16h59

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