Page 1 sur 1

[..] Problème avec PixelSearch

Posté : mer. 03 sept. 2008 13:21
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.

Re: [...]probleme PixelSearch

Posté : mer. 03 sept. 2008 15:02
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.

Re: [...]probleme PixelSearch

Posté : mer. 03 sept. 2008 16:41
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 .

Re: [..] Problème avec PixelSearch

Posté : jeu. 04 sept. 2008 00:13
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é.

Re: [..] Problème avec PixelSearch

Posté : jeu. 04 sept. 2008 21:29
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:

Re: [..] Problème avec PixelSearch

Posté : jeu. 04 sept. 2008 23:14
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)

Re: [..] Problème avec PixelSearch

Posté : mar. 21 avr. 2009 10:14
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 ???

Re: [..] Problème avec PixelSearch

Posté : mer. 22 avr. 2009 15:55
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.