Sujet : [Win]Comment mettre un bitmap en mémoire et le charger dans un handle? |
Alload |
Ben je pense que le bitmap est en mémoire avec ma façon, j'initialise un HBITMAP global avec la fonction LoadImage, donc il reste jusqu'à la fin de mon programme. |
Carbon_14 |
En ce qui me concerne, j'utilise le code
handBitMap = LoadBitmap(hInst, MAKEINTRESOURCE(BlocGra));
pour charger une image définie dans les ressources (en fait le bloc des boutons de mon appli).
Le handBitMap est défini en global. Quand je veux utiliser le bitmap, j'écris (16 et 32 bits)
{ BITMAP bm;
HDC hdcMemory;
HBITMAP hbmpOld;
GetObject(handBitMap, sizeof(BITMAP), &bm);
hdcMemory = CreateCompatibleDC(hdc);
hbmpOld = (HBITMAP)SelectObject(hdcMemory, handBitMap);
BitBlt(hdc, 4, 2, 28, 28, hdcMemory, 0, 0, SRCCOPY);
SelectObject(hdcMemory, hbmpOld);
DeleteDC(hdcMemory);
}
Avec le LoadImage, je sais pas. C'est sans doute analogue. |
Alload |
J'expérimente l'affichage des bitmaps dans une application Windows, j'ai vu qu'il fallait créer un HBITMAP que l'on initalisait avec la fonction LoadImage.
Mais j'ai aussi remarqué que le HBITMAP était détruit après son utilisation, du moins comme je l'utilise:
HDC hdc;
HDC hdcSrc;
PAINTSTRUCT ps;
HBITMAP hbm;
hbm = (HBITMAP)LoadImage(NULL, szFile, IMAGE_BITMAP, Width, Height, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
hdcSrc = CreateCompatibleDC(hdcDest);
hdc = BeginPaint(hWnd, &ps);
SelectObject(hdcSrc, hbm);
BitBlt(hdcDest, destx, desty, Width, Height, hdcSrc, srcx, srcy, SRCCOPY);
EndPaint(hWnd, &ps);
Mais dans mon application j'utilise une class qui a une fonction pour afficher un bitmap, le problème c'est que je voulais stocker un HBITMAP initialisé lors de la création d'un objet de ma class, mais comme le HBITMAP est détruit après un affichage ça m'embete un peu.
Pour le moment je recharge simplement le bitmap dès que je veux l'afficher, mais ne connaissez-vous pas un moyen de laisser le bitmap en mémoire et de le réutiliser sans le recharger depuis le disque dur? |