Boite de dialogue Afficher une image 256niveaux

SyN42 Messages postés 11 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 6 février 2006 - 28 oct. 2005 à 13:44
PLUiK Messages postés 46 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 25 août 2006 - 3 nov. 2005 à 13:51
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

SyN42 Messages postés 11 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 6 février 2006
28 oct. 2005 à 15:04
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?
0
PLUiK Messages postés 46 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 25 août 2006
28 oct. 2005 à 17:29
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
0
SyN42 Messages postés 11 Date d'inscription jeudi 26 février 2004 Statut Membre Dernière intervention 6 février 2006
2 nov. 2005 à 17:37
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..
0
PLUiK Messages postés 46 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 25 août 2006
3 nov. 2005 à 13:51
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));
0
Rejoignez-nous