Saturation de la mémoire ?...... [Résolu]

Signaler
Messages postés
330
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
26 octobre 2017
-
Messages postés
12
Date d'inscription
samedi 4 août 2012
Statut
Membre
Dernière intervention
26 août 2019
-
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

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
si
J2 = GetDesktopWindow()
alors prendre:
J1 = GetDC(J2)

relativement identique, mais plus cohérent

mais ok, sinon
Messages postés
12
Date d'inscription
samedi 4 août 2012
Statut
Membre
Dernière intervention
26 août 2019

merci
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
65
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.
Messages postés
330
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
26 octobre 2017

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.
Messages postés
330
Date d'inscription
mercredi 6 décembre 2000
Statut
Membre
Dernière intervention
26 octobre 2017

Encore Merci