Problème saturation mémoire avec screenshot [Résolu]

Messages postés
75
Date d'inscription
lundi 27 octobre 2003
Dernière intervention
11 décembre 2007
- - Dernière réponse : vecchio56
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
- 4 juil. 2005 à 20:18
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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
3
Merci
DeleteObject(bitmap); aussi

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de vecchio56
Messages postés
75
Date d'inscription
lundi 27 octobre 2003
Dernière intervention
11 décembre 2007
0
Merci
J'ai oublié de noter les deux deletedc:



DeleteDC(hdc);

DeleteDC(dc);



Meme avec eux ca n'arrange pas le problème.
Commenter la réponse de cs_sidhannowe
Messages postés
75
Date d'inscription
lundi 27 octobre 2003
Dernière intervention
11 décembre 2007
0
Merci
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 ?
Commenter la réponse de cs_sidhannowe
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
0
Merci
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
Commenter la réponse de vecchio56

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.