cs_mickei
Messages postés15Date d'inscriptionvendredi 10 janvier 2003StatutMembreDernière intervention 3 octobre 2007
-
2 août 2006 à 13:40
cs_mickei
Messages postés15Date d'inscriptionvendredi 10 janvier 2003StatutMembreDernière intervention 3 octobre 2007
-
30 août 2006 à 16:26
Bonjour à tous,
Voila je fais un programme qui détecte des couleurs de 6 points pour intéragir en fonction de celles ci.
Pour cela je fais une capture d'écran que je mets dans un picturebox pour ensuite récupérer la valeur RGB du pixel central et ceci pour 6 picturebox en même temps.
Or je dois faire ceci à une fréquence très rapide : 100ms, et au bout d'un moment (qlq minutes), il y a un plantage, la capture ne marche plus, ma fenêtre vb ne se rafraichie plus bref le programme plante complet.
Est ce que vous savez comment je pourrais remédier à ceci?
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 2 août 2006 à 19:35
En vb6, tu n'auras pas de dispose : ca ne s'applique quand .NET !
Un DC, c'est un Device Context, c'est un endroit où sont stockées les images. Si tu crée un DC et que tu le vide pas, la mémoire est vite saturée.
Passe nous le bout de code qui permet de faire la capture et qui copie l'image dans le picturebox, le problème vient sûrement de là !
cs_mickei
Messages postés15Date d'inscriptionvendredi 10 janvier 2003StatutMembreDernière intervention 3 octobre 2007 30 août 2006 à 14:00
si je ne me trompe, "Picture3.Picture = LoadPicture" doit normalement vider la mémoire de la picturebox non ?
et c'est BitBlt qui charge la capture d'écran.
j'ai oublié de préciser dans le code :
Public Declare Function BitBlt Lib "gdi32" (ByVal hDCDest As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hdcSrc As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 30 août 2006 à 14:25
Oups, désolé j'avais zapper ton avant-dernier message !
Donc le loadpicture doit (en théorie) vider le picturebox, MAIS il n'est pas censé le faire. Donc rien ne veut un bon :
Set Picture3.Image = Nothing
Set Picture3.Picture = Nothing
pour être sûr.
Enlève aussi l'autoredraw (ca peut venir de là !!!) s'il est activé. Je sais qu'il est très gourmand en mémoire, et provoque en plus une fuite mémoire si on charge de nombreuses images à intervale régulier !