Google m'envoie plein de demandes d'internautes qui recherchent comment charger une image PNG ou JPEG depuis les ressources d'un programme C++.
Mettre un bitmap BMP dans les ressources, et le charger en C++/MFC, c'est facile. Y mettre un PNG ou JPEG, c'est un tout petit peu délicat.
D'abord, ajouter l'image dans le fichier ressources :
IDB_IMAGEPNG PNG
Puis la charger dans le code :
// Load image data from PNG section of the resource fileHINSTANCE hResourceModule = AfxGetResourceHandle();HRSRC hRes = FindResource(hResourceModule, MAKEINTRESOURCE(IDB_IMAGEPNG), _T("PNG"));DWORD dwSizeResource = SizeofResource(hResourceModule, hRes);HGLOBAL hMem = LoadResource(hResourceModule, hRes);// Copy the PNG image data into a new bufferBYTE *pRes = (BYTE *)LockResource(hMem);HGLOBAL hImg = GlobalAlloc(GHND, dwSizeResource);BYTE *pImg = (BYTE *)GlobalLock(hImg);memcpy_s(pImg, dwSizeResource, pRes, dwSizeResource);GlobalUnlock(hImg);// Create a GDIPlus Bitmap from a HGLOBALIStream *pStream = NULL;HRESULT hr = CreateStreamOnHGlobal(hMem, FALSE, &pStream);Bitmap *pBitmap = new Bitmap(pStream);pStream->Release ();GlobalFree(hImg);