[..] Problème avec PixelSearch

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Xynablue
Niveau 1
Niveau 1
Messages : 5
Enregistré le : sam. 30 août 2008 15:26
Status : Hors ligne

[..] Problème avec PixelSearch

#1

Message par Xynablue »

Bonjour a tous, alors j'ai encore un probleme avec mon PixelSearch lol. C'est le dernier promis topic sur cette fonction promis ^^.

Voila je lui demande de faire un PixelSearch dans la zone 170, 43, 1262, 679 Alors il fait sa recherche normalement sans aucun soucis sauf que il commence toujours sa recherche de 170, 43 jusqu'a 1262,679 . Et quand il trouve plusieurs pixels de la meme couleur, il prend celles qui sont les plus proche de 170, 43 . Comment faire pour qu'il prenne uniquement les plus proches de 1262, 679 ???

J'ai bien essayer de marquer 1262, 679, 170, 43 mais il ne trouve plus aucune pixel meme quand il y en a .

Si quelqu'un connais une commande pour faire cela ou une astuce cela m'aiderait beaucoup !


EDIT: Pendant que j'y suis je vais vous parlez d'un autre probleme, quelle est la commande permettant de quitter le script et de le redemarrer.
Par exemple, dans mon script je voudrait que au bout de 10 minutes, le programme se ferme et redemarre et cela de facon autonome.

Merci d'avance.
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [...]probleme PixelSearch

#2

Message par jbnh »

Pour ton deuxième problème il faut faire une boucle pour que le script tourne en permanence et que tu fasses une pause de 10 minutes.

Ce qui donnerait:

Code : Tout sélectionner

HotKeySet("{ESC}", "MyExit")

While 1
...........
Sleep(600000)
Wend

Func MyExit()
    Exit 
EndFunc
Pour le Pixelsearch, je sais pas trop.
The search is performed left-to-right, top-to-bottom and the first match is returned.
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [...]probleme PixelSearch

#3

Message par timmalos »

Si il est impossible de faire a l'envers avec la fonction pixelsearch, alors passe par un For qui va aller en diminuant, ca devrait faire l'affaire .
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11793
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème avec PixelSearch

#4

Message par Tlem »

Grrrrr , encore un problème avec PixelSearch. :x

Je vais proposer une solution, mais avant je vais essayer d'expliquer ma réflexion pour que d'autres utilisateurs puissent faire de même et essayer lorsqu'ils sont devant un problème, réfléchir à comment le résoudre ou le contourner.

D'abord partons de la demande de Xynablue.
Il souhaite retrouver un pixel dans un rectangle de coordonnées 170, 43, 1262, 679.
Jusque là pas de problème il y à la fonction PixelSearch. Seulement, cette fonction ne retourne que le premier pixel trouvé en commençant comme cela est indiqué dans la documentation en haut à gauche, de gauche vers la droite et en finissant en bas à droite.

Mais voilà Xynablue préfèrerait que la fonction démarre en bas à droite pour finir en haut à gauche.
Bon, je regarde la doc à la recherche de l'endroit ou je peut trouver cette fonction pour la modifier à ma convenance, et là je constate qu'il n'y à pas besoin d'include pour cette fonction. :shock:
J'en déduit donc que c'est une fonction interne et donc pas de modification possible. :cry:

Donc ... il faut trouver une autre solution car PixelSearch ne peut répondre à mon besoin en l'état.
Alors ... Comment faire ... Peut être en créant tout simplement une fonction qui cherche ce que je veut, comme je le veut et là ou je veut. :lol: :mrgreen:

Pour cela j'ai deux solutions :
- Soit je décompose mon rectangle en petite partie (genre 5x5 pixels) et je fait une boucle pour chercher par carré de 5x5 pixels dans mon rectangle de coordonnées 170, 43, 1262, 679 avec la fonction PixelSearch le pixel que je recherche.
Évidemment je choisit à partir de ma boucle le sens à partir duquel je lance la recherche.
ou
- je 're-crée' une fonction similaire à PixelSearch mais qui va dans l'autre sens (ou celui que je veut).
Donc retour à la doc de PixelSearch et là je regarde dans la section Related les autres fonctions en relation ...
Mais .. Que vois-je ... il existe une fonction PixelGetColor. :o
Ben c'est cool je vais donc pouvoir me créer ma propre fonction de recherche de pixels !!!

Le principe en est tout bête : Je fait une boucle sur les coordonnées de mon rectangle.
A ce moment là il est possible de choisir dans quel sens on va effectuer la recherche (gauche<->droite, haut<->bas etc ...) et lorsque le/les pixels sont trouvé(s) on stocke les coordonnées dans une chaine ou un tableau.
Dans le cas d'une recherche de plusieurs pixels, il est préférable de stoker les coordonnées dans une chaine, pour pouvoir créer un tableau très rapidement à partir de la chaine (le re-dimensionnent et la manipulation de tableau prend énormément de temps machine).

Voilà, je pense avoir donné suffisamment d'informations pour que Xynablue crée sa propre fonction, et pour donner de l'inspiration aux autres. :lol:

PS : Jetez un oeil dans la doc sur la fonction For...To...Step...Next .
Vous y découvrirez comment faire une boucle inverse et même comment avoir des pas de différentes valeurs au lieu de systématiquement utiliser l'unité.
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
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Problème avec PixelSearch

#5

Message par timmalos »

C'est ce que je voulais lui dire en indiquant mon "for", mais qu'est ce que tu es arrivé a mieux lui expliquer que moi ! :lol:
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11793
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème avec PixelSearch

#6

Message par Tlem »

timmalos a écrit :mais qu'est ce que tu es arrivé a mieux lui expliquer que moi ! :lol:
C'est ça le rôle du modérateur. 8)
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é".
Oxygene31
Niveau 2
Niveau 2
Messages : 26
Enregistré le : sam. 18 avr. 2009 16:36
Status : Hors ligne

Re: [..] Problème avec PixelSearch

#7

Message par Oxygene31 »

Salut !!

Et si l'on connait la couleur d'un deuxième pixel de la zone ne pourrait on pas mettre une condition pour trouver le bon pixel ??

Je m'explique : Dans la zone 170, 43 imaginons qu'il y ai plusieurs pixels bleu et dans la zone 1262, 679 il y a un pixel bleu et un pixel vert (qui n'est pas dans la zone 170, 43 ). Ne pourrait'on pas dire que si on trouve un pixel vert dans la zone 1262, 67 alors le pixel bleu a trouver est celui de cette zone ???
tolf
Niveau 7
Niveau 7
Messages : 318
Enregistré le : ven. 15 févr. 2008 12:25
Localisation : Paris
Status : Hors ligne

Re: [..] Problème avec PixelSearch

#8

Message par tolf »

Oxygene31 a écrit :Ne pourrait'on pas dire que si on trouve un pixel vert dans la zone 1262, 67 alors le pixel bleu a trouver est celui de cette zone ???
Le problème, c'est que 1262, 67 n'est pas une zone mais les coordonnées d'un pixel. Donc comment définir une "zone" ?
Si vous voulez trouver le pixel bleu le plus proche du pixel vert du rectangle 170, 43 x 1262, 679, commencez par chercher tous les pixels verts par une fonction que vous aurez créé facilement avec un For...Next.

Ensuite, il faut créer une deuxième fonction qui fait la recherche des pixels bleus en s'éloignant progressivement des pixels verts trouvés :
► Afficher le texte
La fonction "CherchePixelProche" prend en paramètres l'abscisse et l'ordonnée du pixel vert, ainsi que la couleur du pixel à chercher (bleu) et retourne un tableau avec les coordonnées du pixel trouvé, ainsi que son éloignement par rapport au pixel de base. A adapter suivant vos besoins.
Lisez la documentation d'AutoIt en français (et participez svp :mrgreen:) !

Mes UDF :
[/i][/b]
Répondre