Page 1 sur 1
[R] Pixelsearch, changer les valeurs
Posté : dim. 23 août 2009 12:24
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.
Re: [..]Pixelsearch, changer les valeurs
Posté : dim. 23 août 2009 18:16
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.

Re: [..] Pixelsearch, changer les valeurs
Posté : dim. 23 août 2009 18:29
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
Edit voila un schéma, et meme que les axes sont pas inversées ^^

- exempl.png (6.27 Kio) Vu 1386 fois
Re: [..] Pixelsearch, changer les valeurs
Posté : dim. 23 août 2009 18:54
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.
Re: [..] Pixelsearch, changer les valeurs
Posté : lun. 24 août 2009 00:44
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.
Re: [..] Pixelsearch, changer les valeurs
Posté : lun. 24 août 2009 01:17
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
Re: [..] Pixelsearch, changer les valeurs
Posté : lun. 24 août 2009 09:31
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é
Re: [..] Pixelsearch, changer les valeurs
Posté : lun. 24 août 2009 17:49
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
Re: [R] Pixelsearch, changer les valeurs
Posté : lun. 24 août 2009 20:09
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).