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 Palette bitmap


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 Palette bitmap
    bonjour,

    quand j'ouvre une image BMP 8 bits et que je l'enregistre tout de suite après, je n'obtiens pas une image en niveaux de gris mais "colorées" .Je ne modifie pas la RGBQUAD..., je reecirs exactement l'image de la meme manière que je la lis.

    qqun a -t-il une idée?

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Citation Envoyé par tiboo
    bonjour,

    quand j'ouvre une image BMP 8 bits et que je l'enregistre tout de suite après, je n'obtiens pas une image en niveaux de gris mais "colorées" .Je ne modifie pas la RGBQUAD..., je reecirs exactement l'image de la meme manière que je la lis.

    qqun a -t-il une idée?
    Pour moi, OpenGL, c'est loin (j'en apperçoit plus que le nom) mais pour les autres, ton code pourrait aider à cerner le problème.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 575
    Points
    41 575
    Par défaut
    Euh, je ne vois pas trop où est OpenGL là-dedans...

    Ça ressemble plus à un problème avec GDI.


    Donc, ton problème:
    • Quel est exactement le format d'entrée de l'image ? Niveaux de gris 8 bits ?
    • Quel est exactement le format de sortie que tu obtiens à la place ? Palette 8 bits ? Couleurs 24/32 bits ?

  4. #4
    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
    le format d'entré de mon image est BMP. Le nombre de bit est 8.
    J'ouvre l'image BMP,recupere le fileheader, le infoheader, la palette, le tableau de pixel...
    Je reecris ensuite cette image BMP, le fileheader,l'infoheader, la palette et le tableau de pixel
    Le fileheader, l'infoheader, la palette et le tableau de pixel sont des champs d'une classe Image..
    l'image de debut et l'image de fin n'ont pas du tout la meme tete, on distingue les forme grossières mais les couleurs n'ont rien à voir. je pense que cela vient de la palette mais je ne sais pas d'où....

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 575
    Points
    41 575
    Par défaut
    Ça ne répond pas à mes questions...
    • Quel est exactement le format d'entrée de l'image ? Niveaux de gris 8 bits ou palette autre que les niveaux de gris ?
    • Quel est le format de l'image d'arrivée ? As-tu vérifié que c'était toujours 8 bits ? Les deux images passent-elles bien à paint ?

  6. #6
    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
    ok, je comprend mieux ta question :

    • le format d'entré est 8bits et non pas une palette autre que du niveau de gris. Cependant je lis quand meme une palette
    • le format de sortie est aussi 8 bits . Les deux images sont des images 8 bits


    mon code pour lire la bitmap est celui ci

    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
     
    if (infoHeader.biBitCount==8)
    		{
                      int l=0,diff=0;
    	          rgbq = new RGBQUAD[256];
    		  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,(256 * sizeof(RGBQUAD)));
    		  for (int i=0;i<hauteur;i++)
    			{
    				for (int j=0;j<(largeur+diff);j++)
    					{
    					    if( (j>=largeur) && (j<(largeur+diff)) )
    					    {
                                                   char inutile;
                                                   f.read((char*)&inutile,sizeof(char));
    					    }
    					    else
    					    {
    						f.read((char*)&image[i][j],sizeof(char));
    					    }
    					}
                            }
     }
    et pour ecrire le bitmap :

    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
     
    if (infoHeader.biBitCount==8)
    		 {
    			if ((double)((largeur)/4.)!=(int)((largeur)/4.)) {diff=((int)((largeur/4.)+1))*4-largeur;}
    			f.write((char*)&header,sizeof(BITMAPFILEHEADER));
    			f.write((char*)&infoHeader,sizeof(BITMAPINFOHEADER));
    		        f.write((char*)&rgbq,(256 * sizeof(RGBQUAD)));
     
    			for (int i=0;i<hauteur;i++)
    				{
    				for (int j=0;j<(int)(largeur+diff);j++)
    					{
    					   if( (j>=largeur) && (j<(largeur+diff)) )
    					    {
                                                  int inutile=0;
                                                  f.write((char*)&inutile,sizeof(char));
    					    }
    					    else
    					    {
                                                  f.write((char*)&image[i][j],sizeof(char));
    					    }
                                            }
    				}
    		 }

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 575
    Points
    41 575
    Par défaut
    Hum.. Il est un peu tard pour rentrer dans les détails, mais dans l'ensemble ça a l'air à peu près normal...

    Par contre, tu devrais soigner l'indentation et faire gaffe au deuxième if de ton code de lecture.

  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
    ok pourquoi le deuxième if pose un problème??concernant l'indentation,c'est dû au forum, le copier coller marche pas fort...j'ai reindenté à la main
    pourquoi alors une difference entre l'image d'entré et l'image de sortie.... ??
    je reste bloqué....surtout que moi aussi je pense que ça devrait fonctionner..

  9. #9
    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
    toujours aucune idées?

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    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 379
    Points : 41 575
    Points
    41 575
    Par défaut
    On ne joue pas avec les doubles et les == ou !=.

    Si tu veux tester si un nombre est divisible par X, teste si nombre % X est égal à zéro.

  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
    j'ai trouvé un peu par hasard... sauf que c mon erreur que je n'ai pas comprise...En effet lorsque j'ecris ma variable rgbq je mettais un &.
    Je crois que je ferai bien de reviser les pointeurs....ou alors j'ai rien compris
    ce qui est risible mais inquietant

    merci de bien vouloir m'expliquer (pas les pointeurs juste mon erreur) bien que je cherche de mon coté

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    On ne voit pas sa déclaration dans ton code, mais par déduction rgbq semble être un pointeur sur ta palette.

    Or, lorsque tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f.write((char*)&rgbq,(256 * sizeof(RGBQUAD)));
    Le 1er argument est bel et bien un pointeur (et en plus casté comme tel), donc le compilateur n'y voit que du feu ; mais le & fait que c'est un pointeur sur le pointeur rgbq (donc pas sur la palette) qui est passé à fwrite, et les données pointées sauvegardées sont donc invalides (ça aurait même pu avec un peu de malchance provoquer un "page fault").

    Citation Envoyé par tiboo
    Je crois que je ferai bien de reviser les pointeurs....
    Sage décision

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

Discussions similaires

  1. problème impression bitmap
    Par chtiot dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 16/04/2009, 06h39
  2. probléme avec BitMap
    Par sky88 dans le forum Débuter
    Réponses: 2
    Dernier message: 27/01/2009, 18h48
  3. Problèmes de bitmaps et processus (IO).
    Par Bonhomme08 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 28/02/2008, 01h36
  4. [BitMap] Problème avec BitMap.LoadFromStream
    Par Philippe Gormand dans le forum Delphi
    Réponses: 3
    Dernier message: 22/07/2006, 18h53
  5. [BCB6]Problème Dimensions Bitmap
    Par vsavoir dans le forum C++Builder
    Réponses: 10
    Dernier message: 09/11/2004, 13h35

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