[R] PixelSearch d'une nuance de couleur sans cette couleur

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
rougipa
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 14 oct. 2011 20:46
Status : Hors ligne

[R] PixelSearch d'une nuance de couleur sans cette couleur

#1

Message par rougipa »

Bonjour,

J'ai correctement lu l'aide de Scite et ai effectué quelques recherches mais sans résultats à mon problème.

Je souhaite trouver, dans un rectangle, un pixel de couleur à peu près rouge mais pas totalement rouge (Donc pas la couleur #FF0000 en héxadécimal)

Voici donc ce que j'ai essayé de faire :

Code : Tout sélectionner

         $zone = PixelSearch(1000,600,1200,620,0xFF0000,30)

        If Not @error Then
            While Hex(PixelGetColor($zone[0],$zone[1]),6) = "FF0000"
                $zone = PixelSearch(1000,600,1200,620,0xFF0000,30)
            Sleep(100)
            WEnd
            ;On a passé la boucle, donc on a trouvé un pixel à peu près rouge différent de #FF0000
            Tooltip("Pixel trouvé !",0,0)
        EndIf
Ainsi, le script devrait :
- Chercher un pixel de couleur #FF0000 à 30 nuances de rouge, de vert et de bleu près.
- Si le pixel est exactement de couleur #FF0000, on recherche un autre pixel jusqu'à ce qu'il en soit trouvé un rouge mais pas exactement #FF0000.

Cependant, cela ne fonctionne pas ...

Si je met un fond d'écran de couleur unie #FF0000, le script m'affiche la Tooltip alors qu'il ne devrait pas puisqu'il scanne un rectangle qui est une partie du fond d'écran et qui donc ne contient pas de pixels autres que ceux de couleur #FF0000.

Quelqu'un pourrait m'éclairer sur une erreur que j'aurais faite ? Ou me donner une autre alternative pour faire ce que je souhaite ?

Merci d'avance :)
Modifié en dernier par rougipa le lun. 24 oct. 2011 10:40, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11830
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] PixelSearch d'une nuance de couleur sans cette coul

#2

Message par Tlem »

Regardez sur le forum, il y a un membre qui a créé une DLL pour la gestion des pixels. Peut être y a t-il une fonction intégrée qui retourne la totalité des coordonnées des pixels correspondant à la recherche.
Sinon, je pense qu'il vaut mieux que vous fassiez une recherche pixel par pixel ligne par ligne ou colonne par colonne afin de récupérer les coordonnées des pixels correspondant aux critères de recherche.
Une fois ces coordonnée dans un tableau, vous en ferez ce que vous voudrez, par contre ce type de recherche risque d'être longue sur un rectangle de sélection assez important et donc seul la solution de la DLL sera à privilégier (si elle peut vous retourner les infos recherchées).
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
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [..] PixelSearch d'une nuance de couleur sans cette coul

#3

Message par PandiPanda »

FastFind est l'udf que vous avez besoin me semble ^^
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
rougipa
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 14 oct. 2011 20:46
Status : Hors ligne

Re: [..] PixelSearch d'une nuance de couleur sans cette coul

#4

Message par rougipa »

Je ne vois aucune fonction qui concerne mon problème dans cet UDF ...

Si quelqu'un pourrait m'aider à comprendre pourquoi mon code ne fonctionne pas, je lui en serais reconnaissant :)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] PixelSearch d'une nuance de couleur sans cette coul

#5

Message par mikell »

C'est parce que PixelSearch s'arrête au 1er pixel valable trouvé
Donc pour que la boucle soit efficace faut trouver le moyen de poser ta condition et déplacer la recherche
Peut-être ça pourrait le faire...

Code : Tout sélectionner

For $x = 1000 to 1200  
    For $y = 600 to 620  
        $zone = PixelSearch($x, $y, $x+1, $y+1, 0xFF0000, 30)  [color=#008000]; <= cherche dans une zone 1x1 déplaçable[/color]
        If Not @error Then
            $color = Hex(PixelGetColor($zone[0],$zone[1]),6) 
            If $color = "FF0000" Then 
                ContinueLoop     [color=#008000] ; <= repart sur la boucle For et fait une nouvelle recherche[/color]
            Else
                MsgBox(0,"", $zone[0] & "x" & $zone[1] & " : 0x" & $color)
            EndIf
        EndIf
    Next
Next
msgbox(0,"", "pas trouvé")
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre