Boite de dialogue Afficher une image 256niveaux

Signaler
Messages postés
11
Date d'inscription
jeudi 26 février 2004
Statut
Membre
Dernière intervention
6 février 2006
-
Messages postés
46
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
25 août 2006
-
Bonjour,



Dans ma boite de dialogue j'affiche une image dans un 1er temps en couleur avec la fonction StretchDIBits



int OldMode = SetStretchBltMode(c->GetSafeHdc(),COLORONCOLOR);

StretchDIBits(c->GetSafeHdc()



,0,rect.bottom,rect.right,-rect.bottom,



0,0,bmi.bmiHeader.biWidth,



bmi.bmiHeader.biHeight,

buffer,

&bmi,



DIB_RGB_COLORS,SRCCOPY);

SetStretchBltMode(c->GetSafeHdc(),OldMode);



c est mon CDC*.

buffer mon pointeur pixel

et bmi mon BITMAPINFO



J'extrait le plan bleu de cette image et lorsque je veux l'afficher,
j'obtiens des couleurs qui sont tous sauf du niveau de gris.

Je pense a un probleme de palette mais je ne sais pas trop comment la remplir mon BITMAPINFO bmi.bmiColors



for (int i=0; i <256; i++)

{

bmi.bmiColors[i].rgbBlue = i;

bmi.bmiColors[i].rgbGreen = 0;

bmi.bmiColors[i].rgbRed = 0;

bmi.bmiColors[i].rgbReserved = 0;

}



ca ne marche pas...



Merci pour votre aide.

4 réponses

Messages postés
11
Date d'inscription
jeudi 26 février 2004
Statut
Membre
Dernière intervention
6 février 2006

Apparament,

for (int i=0; i <256; i++)

{

bmi.bmiColors[i].rgbBlue = i;

bmi.bmiColors[i].rgbGreen = 0;

bmi.bmiColors[i].rgbRed = 0;

bmi.bmiColors[i].rgbReserved = 0;

}



ne marche pas car bmi.bmiColors est déclaré dans windows en tagRGBQUAD[1]!



alors qu'il devrait etre tagRGBQUAD[256]

comment puis-je remédier au problème?
Messages postés
46
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
25 août 2006

Salut

Je pense que tu peux allouer la mémoire dynamiquement (enfin c'est ce que je pense):

BITMAPINFO* pbmi = sizeof (BITMAPFINFO) + 255 * (sizeof (RGBQUAD)); //255 car la structure BITMAPINFO en a déjà un, enfin si je ne me trompe pas ^^

et n'oublie pas le free
Messages postés
11
Date d'inscription
jeudi 26 février 2004
Statut
Membre
Dernière intervention
6 février 2006

Si je peux me permettre, tu n'alloue rien comme ca tu met égale un pointeur a un entier.. Le compilateur n'aime pas trop..
Messages postés
46
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
25 août 2006

Mince me suis trompé ! Il manque le malloc et il y a aussi d'autres fautes... Désolé, je rectifie:

BITMAPINFO* pbmi = malloc (sizeof (BITMAPFINFO) + 255 * sizeof (RGBQUAD));