[Win]Comment mettre un bitmap en mémoire et le charger dans un handle?

Comment mettre un bitmap en mémoire et le charger dans un handle? [Win] - Programmation

Marsh Posté le 11-07-2001 à 21:00:34    

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?

Reply

Marsh Posté le 11-07-2001 à 21:00:34   

Reply

Marsh Posté le 12-07-2001 à 13:57:48    

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.

Reply

Marsh Posté le 12-07-2001 à 14:03:35    

Oui mais si je veux garder en mémoire un bitmap qui n'est pas dans les resources?

Reply

Marsh Posté le 12-07-2001 à 14:11:37    

Ben en fait elle marche bien ma méthode, je sais pas ce que j'avais foutu hier comme connerie pour que ça ne marche pas.
:lol: :lol: :lol:
 
Enfin c'est cool. Ca marche :)

Reply

Marsh Posté le 12-07-2001 à 14:24:40    

Je sais que çà ne résoud pas proprement ton pb, mais ne peux-tu pas mapper le fichier BMP en mémoire ???


---------------
- "Qui diable es-tu ?"
Reply

Marsh Posté le 12-07-2001 à 14:37:29    

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed