Initialisation du BITMAPINFO pour avoir une palette 256 couleurs!

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:25
cs_chris91 Messages postés 54 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 4 avril 2007 - 3 nov. 2005 à 19:09
Bonjour, J'extrait de mon bmp 24bit un plan que je veux afficher avec mfc.



Lorsque je veux remplir la pallette de mon bitmapinfo un probleme se pose.



soit BITMAPINFO bmi;

Or lors de cette déclaration, le bmiColors du bitmapinfo est déclaré en
RGBQUAD[1] !! et je ne peux y mettre mes 256 couleurs car il
faudrait RGBQUAD[256].



donc

for (int i=0; i <256; i++)
//cas
pour la palette bleu

{

bmi.bmiColors[i].rgbBlue = i;

bmi.bmiColors[i].rgbGreen = 0;

bmi.bmiColors[i].rgbRed = 0;

bmi.bmiColors[i].rgbReserved = 255;

}



ne marche pas.... Comment puis-je gérer ce cas?



merci de votre aide
A voir également:

2 réponses

gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
3 nov. 2005 à 10:45
Un bitmap 24 bits n'a pas de palette de couleurs.
Le membre RGBQUAD[1] de la structure BITMAPINFO indique le premier element de tableau de couleur de la palette en cas de bitmap <= à 16 bits.
0
cs_chris91 Messages postés 54 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 4 avril 2007
3 nov. 2005 à 19:09
salut,
c'est possible avec un BitBlt et MERGECOPY.
avec MERGECOPY il y a un AND entre la couleur du pixel source et le brush en sélection dans le DC destination.

exemple en WIN32:

HBITMAP hBitmap;
BITMAP bm;
HBRUSH hBrush;
HDC hdc, hdcMem;

// chargement du bitmap en rc
hBitmap = LoadBitmap(hInstance, "IMAGE1");

// récupération informations bmp
GetObject(hBitmap, sizeof(BITMAP), &bm);

// création d'un brush bleu
hBrush = CreateSolidBrush(RGB(0, 0, 255));

// récupération du DC de la fenêtre du prog
hdc = GetDC(hwnd);

// sélection du brush dans le DC
hBrush = (HBRUSH) SelectObject(hdc, hBrush);

// création d'un DCmem
hdcMem = CreateCompatibleDC(hdc);

// sélection du bmp dans le DCmem
hBitmap = (HBITMAP) SelectObject(hdcMem, hBitmap);

// copie du DCmem vers DC avec MERGECOPY
BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight,
hdcMem, 0, 0, MERGECOPY);

// sélection du brush d'origine, destruction du brush et du DC
DeleteObject(SelectObject(hdc, hBrush));
ReleaseDC(hwnd, hdc);

// sélection du bmp d'origine, destruction du bmp et du DCmem
DeleteObject(SelectObject(hdcMem, hBitmap));
DeleteDC(hdcMem);

dans fichier .rc

IMAGE1 BITMAP DISCARDABLE "image.bmp"

avec ce code, j'ai bien une image bleu avec un bmp 24bpp.
bye.
0
Rejoignez-nous