Initialisation du BITMAPINFO pour avoir une palette 256 couleurs!

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
54
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
4 avril 2007
-
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

2 réponses

Messages postés
509
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
3 août 2010

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.
Messages postés
54
Date d'inscription
jeudi 20 novembre 2003
Statut
Membre
Dernière intervention
4 avril 2007

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.