LoadBitmap [Résolu]

Signaler
Messages postés
306
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
15 février 2016
-
Messages postés
306
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
15 février 2016
-
Bonjour,

J'ai un programme qui contient une archive en resource interne et je sors un Bitmap de cette archive que je mets donc en mémoire.
Ce que je voudrais savoir c'est comment créer un HBITMAP depuis un buffer comme le fait l'api LoadBitmap avec les resources.

j'ai essayé divers trucs qui n'ont pas marché:
---------------------------------------------
BITMAPFILEHEADER *fileHeader = (BITMAPFILEHEADER *)data;
BITMAPINFO *bitmapInfo = (BITMAPINFO *)(data + sizeof(BITMAPFILEHEADER));
---------------------------------------------
HBITMAP hBmp = CreateBitmap( bitmapInfo->bmiHeader.biWidth,
                                    bitmapInfo->bmiHeader.biHeight,
                                    bitmapInfo->bmiHeader.biPlanes,
                                    bitmapInfo->bmiHeader.biBitCount,
                                    data + fileHeader->bfOffBits);
---------------------------------------------
HBITMAP hBmp = CreateDIBitmap(hDC,&bitmapInfo->bmiHeader,CBM_INIT,data + fileHeader->bfOffBits,bitmapInfo,DIB_RGB_COLORS);

Merci de votre aide
K@zuya
A voir également:

2 réponses

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Voici un code simplifié qui marche bien chez moi:
HRSRC hresource = FindResource(hinstance, "ID_BMP", RT_BITMAP);
BITMAPINFO* pBitmapInfo = (BITMAPINFO*)LoadResource(hinstance, hresource);
UINT nombrecouleurs = pBitmapInfo->bmiHeader.biClrUsed;
if (nombrecouleurs == 0 && pBitmapInfo->bmiHeader.biBitCount <= 8)   nombrecouleurs = 1 << pBitmapInfo->bmiHeader.biBitCount;
UINT tailleheader = sizeof(BITMAPINFOHEADER) + nombrecouleurs * sizeof(RGBQUAD);
PVOID data = (PVOID)((ULONG_PTR)pBitmapInfo + tailleheader);
HDC hScreenDc = CreateCompatibleDC(NULL);
DIBSECTION section;
HBITMAP hbitmap = CreateDIBSection(hScreenDc, pBitmapInfo, DIB_RGB_COLORS, 0, 0, 0);
GetObject(hbitmap, sizeof(DIBSECTION), &section);
SetDIBits(hScreenDc,(HBITMAP) hbitmap, 0, section.dsBm.bmHeight, data, pBitmapInfo, DIB_RGB_COLORS);
DeleteDC(hScreenDc);
// hbitmap prêt ...
Messages postés
306
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
15 février 2016

Nikel !

K@zuya