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

C++ Discussion :

problème chargement BMP


Sujet :

C++

  1. #1
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 123
    Points : 82
    Points
    82
    Par défaut problème chargement BMP
    bonjour,

    j'ai un problème concernant le chargement de fichiers BMP. quand je reecris l'image, les pixels de l'image se trouvent decalés. Je me demande si à la lecture je fais ce qu'il faut sachant que j'ai lu pour le format BMP qu'il fallait complété chaque ligne par des 0 pour qu'elle soit multiple de 4.

    Pour la lecture,J'ai essayé ce bout de code mais ça ne marche pas.(lecriture est le meme excepté qu'on a write a la place de read)

    J'avoue que je commence à tourner en rond et je suis un peu perdu. quelqu'un pourrait-il m'eclairer?
    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
     
    for (int i=0;i<hauteur;i++)
    {
    	for (int j=0;j<largeur;j++)
    	{
    		if(j == (largeur-1))
    		{
    		    if(largeur%4 == 0)
                        {   
                         f.read((char*)&image[i][j],sizeof(char));
    		    }
    		    else
    		    {
                         f.read((char*)&image[i][j],sizeof(char));
    		     char inutile;
                         for (int k=0; k< (int)(largeur - (largeur/4)*4); k++)
                         f.read((char*)&inutile,sizeof(char));
    		    }
    		}
    		else
    		{
                         f.read((char*)&image[i][j],sizeof(char));
                         //printf("%d\n",&image[i][j]);
    		}
             }
    }

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Le chargement de bitmaps à ma main c'est plus vraiment d'actualité, pourquoi n'utilises-tu pas l'une des nombreuses bibliothèques qui le font déjà très bien ?

  3. #3
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 123
    Points : 82
    Points
    82
    Par défaut
    tout simplement parce que je veux savoir comment on fait. C'est l'objectif de mon projet. Je sais que des truc style freeimage evite de se poser des questions....
    enfin ca serait sympa si qqun pouvait m'aider....

    Merci

  4. #4
    Membre habitué Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Points : 154
    Points
    154
    Par défaut
    Evidement tu as pensé au Header ?
    Quand au 0 ça fait longtemps que j'ai pas joué avec des BMP, mais il me semble que ce n'est pas necessaire. Peut être sous les sytéme 64 bits seulement ?

  5. #5
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 123
    Points : 82
    Points
    82
    Par défaut
    oui j'ai pensé au FILEHEADER et INFOHEADER.
    J'ai essayé un truc avec une image 1 bit/pixel : au lieu de lire 2 RGBQUAD (un pour chaque couleur) j'en lis 4. Et là ça fonctionne!!!C'est donc qu'il ya un decalage qqpart....

  6. #6
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    as-tu essayé avec des images dont les dimensions (la largeur surtout) sont multiples de 4 ?
    Tu seras au moins vite fixé pour savoir si le souci se pose dans les 0 à rajouter ou autre part.

    Et je confirme qu'il est nécessaire de compléter chaque ligne par des 0 pour avoir un nombre d'octets multiple de 4.

  7. #7
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 123
    Points : 82
    Points
    82
    Par défaut
    j'ai essayé avec une image 256 par 256 mais ca ne fonctionne toujours pas.. j'en susi pas loin je le sens...

  8. #8
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 123
    Points : 82
    Points
    82
    Par défaut
    qqun pourrait-il m'aider je tourne en rond........................

  9. #9
    Membre confirmé Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Points : 496
    Points
    496
    Par défaut
    http://www.cplusplus.com/src/winbmp.zip

    Et il en existe des millier comme celui-la !
    ________________________________________________
    http://bliquid.fr : Blog sur Android et l'Acer Liquid

  10. #10
    Membre éclairé Avatar de homeostasie
    Homme Profil pro
    Inscrit en
    Mai 2005
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 939
    Points : 862
    Points
    862
    Par défaut
    Salut

    Ayant bossé un moment sur un projet de traitement d'image avec notamment l'ouverture de bitmap, je te joins des liens qui m'ont été utile:

    http://www.developpez.net/forums/showthread.php?t=33868

    http://www.developpez.net/forums/showthread.php?t=31822

    http://www.developpez.net/forums/showthread.php?t=24541

    Peut être y trouvera tu des renseignements!

  11. #11
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 123
    Points : 82
    Points
    82
    Par défaut
    merci beaucoup pour vos renseignements et vos liens. J'ai regardé winbmp mais j'aurai bien voulu savoir si la manière dont je m'y prenais fonctionnait :

    je procède de cette manière :
    je lis mon bitmpabfileheader, mon bitmpainfoheaderr, ma palette et mon tableau de pixel

    pour la palette si je fais :
    rqbg = new RGBQUAD[2];
    f.read( (char *) rgbq, 2 * sizeof(RGBQUAD) )

    cela fonctionne t-il pour lire ma palette??si j'ai bien compri read decale au fur et a mesure qu'on lit dans le fichier (est ce que je suis clair dans ma question?)

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    rqbg = new RGBQUAD[2];
    f.read( (char *) rgbq, 2 * sizeof(RGBQUAD) )
    Là tu as une palette 2 couleurs, j'espère que ce n'est pas le code qui gère les palettes 256 couleurs (mode 8 bits).

  13. #13
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 123
    Points : 82
    Points
    82
    Par défaut
    non non , c le code qui gère la palette 2 couleurs (bitmap monochrome). Mais est ce que c'est correct d'ecrire cela?
    j'ai l'impression que j'ai un decalage dans la lecture de l'image, qu eje ne commence pas la lecture du tableau de pixel au bon octet...

  14. #14
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Mais est ce que c'est correct d'ecrire cela?
    Sans la petite erreur qui s'est glissée lorsque tu as recopié le code, et sorti de tout contexte, oui. Il n'y a qu'à vérifier les 2 valeurs lues pour en être sûr.

  15. #15
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Un truc que tu peux vérifier aussi, ce sont les offsets spécifiés dans les structures de l'en-tête (attention, il arrive que ce soit eux qui soient invalides)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  16. #16
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 123
    Points : 82
    Points
    82
    Par défaut
    c'est à dire??? comment le verifier ( je suis novice en c++)

  17. #17
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 123
    Points : 82
    Points
    82
    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
    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
     
    int diff=0;
    	ifstream f(name,ios::binary);
     
        if (f.is_open())
    	{
    		f.read((char*)&header,sizeof(BITMAPFILEHEADER));
    		f.read((char*)&infoHeader,sizeof(BITMAPINFOHEADER));
     
    		hauteur=infoHeader.biHeight;
    		largeur=infoHeader.biWidth;
     
    		if (header.bfType != 19778)
    		{
    		    printf("bad magic number bmp ...");
    		}
     
    		if (infoHeader.biCompression > 0)
    		{
    			cout << "Format compressé non supporté..." << endl;
    		}
     
    		if (infoHeader.biBitCount==1)
    		{
                            int l=0,diff=0;
    			rgbq = new RGBQUAD[2];
     
    			if ((double)((largeur)/4.)!=(int)((largeur)/4.)) {diff=((int)((largeur/4.)+1))*4-largeur;}
    			image = new unsigned char* [hauteur];
    			for ( l=0;l<hauteur;l++)
    				{
    					image[l] = new unsigned char [largeur+diff];
    				}
    			f.read((char *)rgbq,(2*sizeof(RGBQUAD)));
     
    			for (int i=0;i<hauteur;i++)
    				{
    					for (int j=0;j<(largeur+diff);j++)
    						{
                                    f.read((char*)&image[i][j],sizeof(char));
                            }
    				}
    			//printf("1er pixel : %d\n",image[0][0]);
    		}

    bon ce code pour lire un bmp monochrome ne fonctionne pas . Pourtant d'apres tout ce que j'ai pu lire,ça devrait marcher... c desesperant.qqun voit-il ce qui cloche?

  18. #18
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 123
    Points : 82
    Points
    82
    Par défaut
    arrgggh...j'ai trouvé mon decalage. C'est une faute très bête...
    Ce n'est pas à la lecture que cela coinçait mais à l'ecriture. En effet, dans le champs biBitOff ,j'oubliais de specifier la taille de ma palette...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header.bfOffBits=(sizeof(BITMAPINFOHEADER)+sizeof(BITMAPFILEHEADER)+(2*sizeof(RGBQUAD)));
    bon cependant ça ne resoud pas tout mes problèmes. maintenant, il faut que je vois comment me servir de la palette.....car je n'ai pas les vrai couleurs pour ll'instant.

  19. #19
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ce n'est pas à la lecture que cela coinçait mais à l'ecriture
    Il faut toujours vérifier ton image de test avec un logiciel de visualisation avant toute chose, surtout si c'est toi qui a écrit l'image

    Sinon j'aime beaucoup le printf suivi d'un cout

  20. #20
    En attente de confirmation mail
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2006
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 123
    Points : 82
    Points
    82
    Par défaut
    j'avais même pas vu....bon on va dire que je fais des essais. Je me forme
    en fait c une vieille habitude du boulot...je travaille en PERL où on utilise printf.

Discussions similaires

  1. Réponses: 8
    Dernier message: 08/11/2021, 10h43
  2. Réponses: 5
    Dernier message: 17/10/2006, 18h27
  3. [Applet] Problème chargement de classe
    Par simsky dans le forum Applets
    Réponses: 1
    Dernier message: 08/05/2006, 19h31
  4. [FLASH MX] Problème chargement/preloader
    Par Gwenouille dans le forum ActionScript 1 & ActionScript 2
    Réponses: 6
    Dernier message: 26/04/2006, 13h03
  5. [FLASH 8] Probléme chargement .swf et variable
    Par segphault dans le forum Flash
    Réponses: 1
    Dernier message: 24/10/2005, 13h18

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