Saturation de la mémoire ?......

Résolu
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017 - Modifié le 27 août 2019 à 15:33
mesangeai Messages postés 12 Date d'inscription samedi 4 août 2012 Statut Membre Dernière intervention 26 août 2019 - 26 août 2019 à 15:01
Bonjour,

Je recherche dans un boucle et dans un espace délimité sur l'écran, un groupe de pixels de couleur par exemple Rouge.
Lorsqu'un pixel rouge est trouvé, le traitement se déroule normalement.
Lorsqu'il n'est pas trouvé, il semble y avoir saturation de la mémoire.

For I1 = 660 To 700 Step 3
    For I2 = 420 To 464 Step 3
        If GetPixel(GetDC(0&), I1, I2) = Vbred Then
            SetCursorPos I1, I2
            Call mouse_event(MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, I1,
            I2, 0, 0)
            Exit sub  ' Le traitement est correcte
    Next i2
Next i1

'-----------------------------------
SetCursorPos PosGoL, PosGoT
Call mouse_event(MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, PosGoL, PosGoT, 0, 0)


Ici il doit y avoir saturation de la mémoire (Des parties de l'écran sont alors incrusté de rectangles noirs, du texte disparaît, impossible de sortir proprement du programme.

Avez vous une idée sur la question ?.....

Par avance merci.


Ps: L'espace dans lequel se trouve le groupe de pixels recherchés se trouve en dehors de la Form

4 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 juil. 2008 à 21:23
si
J2 = GetDesktopWindow()
alors prendre:
J1 = GetDC(J2)

relativement identique, mais plus cohérent

mais ok, sinon
3
mesangeai Messages postés 12 Date d'inscription samedi 4 août 2012 Statut Membre Dernière intervention 26 août 2019
26 août 2019 à 15:01
merci
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
15 juil. 2008 à 09:59
passons sur le coté performances d'un GetPixel.


mais ton GetDC(0&) en boucle => fuites mémoires

(et faut pas oublier le ReleaseDc)

en somme, demande ton DC UNE fois, joues avec, release le.
0
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
15 juil. 2008 à 19:10
J'ai mis comme conseillé le Getdc avant la Boucle, c'est performant et ça marche impeccable.

En ce qui concerne le ReleaseDC, je me demande si je l'ai codifié correctement

Avant la boucle:
J2 = GetDesktopWindow()
J1 = GetDC(0&)

Dans la Boucle:
If GetPixel(J1, I1, I2) = vbred Then .............

Et après la Boucle:
ReleaseDC J2, J1

Est-ce correcte ?

Encore Merci.
0
Cjvg Messages postés 330 Date d'inscription mercredi 6 décembre 2000 Statut Membre Dernière intervention 26 octobre 2017
16 juil. 2008 à 09:57
Encore Merci
0
Rejoignez-nous