Problème saturation mémoire avec screenshot

Résolu
Signaler
Messages postés
75
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
11 décembre 2007
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Bonjour,



Je réalise un screenshot régulièrement (ttes les 500ms) grace à un timer, le code qui génère le screenshot est le suivant:



HWND pWnd = GetDesktopWindow();

HBITMAP bitmap;

HDC dc = GetWindowDC(pWnd);

HDC hdc;

hdc=CreateCompatibleDC(dc);



int ScreenWidth = GetDeviceCaps(dc, HORZRES);

int ScreenHeight = GetDeviceCaps(dc, VERTRES);



bitmap=CreateCompatibleBitmap(dc, ScreenWidth, ScreenHeight);



SelectObject(hdc,bitmap);

BitBlt(hdc, 0, 0, ScreenWidth,ScreenHeight, dc, 0, 0, SRCCOPY);



Mon problème est que visiblement la mémoire occupée par le programme
augmente de manière constante et que au bout d'environ 1 min, le
screenshot ne s'effectue plus (visiblement l'erreur se trouve dans la
création des DC). Je suis sur que c'est cette partie du programme qui
pause problème. Qqun a une idée ?



Merci pour votre aide.

4 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
DeleteObject(bitmap); aussi
Messages postés
75
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
11 décembre 2007

J'ai oublié de noter les deux deletedc:



DeleteDC(hdc);

DeleteDC(dc);



Meme avec eux ca n'arrange pas le problème.
Messages postés
75
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
11 décembre 2007

Ok merci ca à l'air d'etre ca, je n'ai visiblement plus de problème de
screenshot ni de mémoire sauf que ca augmente encore mais très
légèrement (ce que je trouve pas normal). Normalement lorsque la
fonction est terminée ca libère la mémoire automatiquement de ttes les
variables de la fonction non ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
Bien sur que non, comment la mémoire pourrait elle être libérée
automatiquement? Un HBITMAP est juste un pointeur vers une zone
mémoire, c'est celle ci que tu libères en utilisant DeleteObject