[R] Pixelsearch, changer les valeurs

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Thibault
Niveau 1
Niveau 1
Messages : 13
Enregistré le : mar. 18 août 2009 10:35
Status : Hors ligne

[R] Pixelsearch, changer les valeurs

#1

Message par Thibault »

Bonjour, j'utilise la fonction Pixelsearch dans une de mes applications, mais parfois elle se "bloque", ce que je veux dire c'est que la position qu'elle retourne n'est pas bonne (une sorte d'erreur de recherche, un faux-positif en quelque sorte). J'aimerai qu'à chaque fois que la fonction Pixelsearch est appelée elle renvoie une valeur différente de la précédente. En gros, ça revient à créer une valeur interdite.
Je sais que c'est un peu compliqué, si vous avez besoins d'autres informations je peux y répondre.
Modifié en dernier par Thibault le lun. 24 août 2009 17:50, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..]Pixelsearch, changer les valeurs

#2

Message par Tlem »

La fonction PixelSearch recherche dans une zone. Vous ne pouvez exclure un ou plusieurs pixels de cette zone.

Si c'est bien ce que vous voulez faire, il vous faudra créer votre propre fonction.
Pour cela vous aurez besoin de la commande PixelGetColor().
Il vous faudra aussi créer une sorte de boucle qui 'scannera' chaque pixel de la zone définie.
Et pour finir, il vous faudra aussi stocker les coordonnées de chaque valeur positive afin de ne pas tenir compte des valeurs déjà retournées.

Bon courage. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Pixelsearch, changer les valeurs

#3

Message par Iste »

Je conseil plutot un pixelsearch() plus dirigé, Si il s'agit de virer qu'un seul pixel, on peut s'en tirer avec 4 pixelsearch()

Code : Tout sélectionner

Func _PixelSearch($PasX,$PasY,$left, $top, $right, $bottom, $color, $shade_variation = 0, $step = 1, $hwnd = "")
    $return = PixelSearch($left,$top,$right,$PasY-1,$color, $shade_variation = 0, $step = 1, $hwnd = "")
    If Not @error Then Return $return
    $return = PixelSearch($left,$PasY,$PasX-1,$PasY, $color, $shade_variation = 0, $step = 1, $hwnd = "")
    If Not @error Then Return $return
    $return = PixelSearch($PasX+1,$PasY,$right,$PasY, $color, $shade_variation = 0, $step = 1, $hwnd = "")
    If Not @error Then Return $return
    $return = PixelSearch($left,$PasY+1,$right,$bottom,$color, $shade_variation = 0, $step = 1, $hwnd = "")
    If Not @error Then Return $return
    Return SetError(1,0,0)
EndFunc
Je sais pas si c'est vraiment plus rapide, mais en tout cas, ce code devrait etre fonctionnel :D

Edit voila un schéma, et meme que les axes sont pas inversées ^^
exempl.png
exempl.png (6.27 Kio) Vu 1336 fois
Signez ici
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Pixelsearch, changer les valeurs

#4

Message par Tlem »

Pas très adapté pour l'exclusion de multiple pixels.
D'après ce qu'il dit, Thibault veut exclure chaque pixel positif déjà retourné. Donc le nombre va vite augmenté et votre solution va vite devenir compliquée.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Thibault
Niveau 1
Niveau 1
Messages : 13
Enregistré le : mar. 18 août 2009 10:35
Status : Hors ligne

Re: [..] Pixelsearch, changer les valeurs

#5

Message par Thibault »

Excusez-moi, je ne vous ai pas donner assez de détails. Ma recherche de pixel fait partie d'une boucle, et cette boucle contient deux fois la fonction pixelsearch. Ce que je souhaite, c'est que le second pixelsearch ne renvoi pas les même résultats que la première.
Avatar du membre
imitsu
Niveau 1
Niveau 1
Messages : 10
Enregistré le : ven. 14 août 2009 14:42
Status : Hors ligne

Re: [..] Pixelsearch, changer les valeurs

#6

Message par imitsu »

Thibault a écrit :Excusez-moi, je ne vous ai pas donner assez de détails. Ma recherche de pixel fait partie d'une boucle, et cette boucle contient deux fois la fonction pixelsearch. Ce que je souhaite, c'est que le second pixelsearch ne renvoi pas les même résultats que la première.
La fonction PixelSearch est très délicate. Une fois ton 1er PixelSearch effectué tu pourra effectué ton 2eme PixelSearch en fonction de la position du 1er Pixel trouvé précédemment, par contre il faudra beaucoup bidouiller si tu veux ratisser entièrement la zone. Ex :

Code : Tout sélectionner

Do
   $1erPS = PixelSearch($x1, $y1, $x2, $y2, $color)
Until $1erPS <> 1

$2erPS = PixelSearch($1erPS[0] + 1, $1erPS[1], $x2, $1erPS[1], $color)

If $2erPS = 1 Then
 $3erPS = PixelSearch($x1, $1erPS[1] + 1, $x2, $y2, $color)
Endif
 
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Pixelsearch, changer les valeurs

#7

Message par Iste »

Ha ben, dans ce cas ma fonction est tres bien :p
Suffit de l'appeler en second, avec les valeur renvoyées par la 1er

Code : Tout sélectionner

$result = PixelSearch(100,200,500,600,$color)
$result2 = _PixelSearch($result[0],$result[1],100,200,500,600,$color)


Func _PixelSearch($PasX,$PasY,$left, $top, $right, $bottom, $color, $shade_variation = 0, $step = 1, $hwnd = "")
    $return = PixelSearch($left,$top,$right,$PasY-1,$color, $shade_variation = 0, $step = 1, $hwnd = "")
    If Not @error Then Return $return
    $return = PixelSearch($left,$PasY,$PasX-1,$PasY, $color, $shade_variation = 0, $step = 1, $hwnd = "")
    If Not @error Then Return $return
    $return = PixelSearch($PasX+1,$PasY,$right,$PasY, $color, $shade_variation = 0, $step = 1, $hwnd = "")
    If Not @error Then Return $return
    $return = PixelSearch($left,$PasY+1,$right,$bottom,$color, $shade_variation = 0, $step = 1, $hwnd = "")
    If Not @error Then Return $return
    Return SetError(1,0,0)
EndFunc
Le second pixelsearch() ignorera le 1er pixel trouvé
Signez ici
Thibault
Niveau 1
Niveau 1
Messages : 13
Enregistré le : mar. 18 août 2009 10:35
Status : Hors ligne

Re: [..] Pixelsearch, changer les valeurs

#8

Message par Thibault »

Merci pour votre aide. Je ne maîtrise pas encore totalement les fonctions et les appels de fonctions donc il ne me reste plus qu'à travailler encore avant de bien comprendre vos exemples de codes.


Merci
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] Pixelsearch, changer les valeurs

#9

Message par Tlem »

Effectivement, la fonction de Iste semble toute indiquée dans le cas nouvellement exposé.

Cela dit, selon le type de recherche effectuée, il pourrait être possible de tout simplement déduire la coordonnée Y du second PixelSearch (si les coordonnées sont identiques).
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre