Bonjour, voici mes fonctions ...
______________________________________
Nécessite :
#include <Color.au3>
#include <Array.au3>
______________________________________
► Afficher le textePixelSearchList
Code : Tout sélectionner
Func PixelSearchList($gauche, $haut, $droit, $bas, $hSearchCouleur, $variation = 0, $exception = "", $commande = "")
    Local $result = ""
    Local $variationPlus
    Local $arrayExeption
    If $exception <> "" Then
        $arrayException = StringSplit($exception, "|", 2)
    EndIf
    $SearchCouleur = _ColorGetRGB($hSearchCouleur)
    For $h = 0 To $bas-$haut
        For $l = 0 To $droit-$gauche
            $variationPlus = 0
            If $exception = "" Or _ArrayFindAll($arrayException, $gauche + $l & "," & $haut + $h) = -1 Then
                $hCouleur = "0x" & Hex(PixelGetColor($gauche + $l, $haut + $h), 6)
                $couleur = _ColorGetRGB($hCouleur)
                If $hCouleur = $hSearchCouleur Then
                    If $commande <> "" Then
                        $commande = StringReplace($commande, "$X", $gauche + $l)
                        $commande = StringReplace($commande, "$Y", $haut + $h)
                        Execute($commande)
                    EndIf
                    $result &= $gauche + $l & "," & $haut + $h & "|"
                Else
                    If $SearchCouleur[0] > $couleur[0] Then
                        If $SearchCouleur[0]-$couleur[0] <= $variation Then
                            $variationPlus += 1
                        EndIf
                    Else
                        If $couleur[0]-$SearchCouleur[0] <= $variation Then
                            $variationPlus += 1
                        EndIf
                    EndIf
                    If $SearchCouleur[1] > $couleur[1] Then
                        If $SearchCouleur[1]-$couleur[1] <= $variation Then
                            $variationPlus += 1
                        EndIf
                    Else
                        If $couleur[1]-$SearchCouleur[1] <= $variation Then
                            $variationPlus += 1
                        EndIf
                    EndIf
                    If $SearchCouleur[2] > $couleur[2] Then
                        If $SearchCouleur[2]-$couleur[2] <= $variation Then
                            $variationPlus += 1
                        EndIf
                    Else
                        If $couleur[2]-$SearchCouleur[2] <= $variation Then
                            $variationPlus += 1
                        EndIf
                    EndIf
                    If $variationPlus = 3 Then
                        If $commande <> "" Then
                            $commande = StringReplace($commande, "$X", $gauche + $l)
                            $commande = StringReplace($commande, "$Y", $haut + $h)
                            Execute($commande)
                        EndIf
                        $result &= $gauche + $l & "," & $haut + $h & "|"
                    EndIf
                EndIf
            EndIf
        Next
    Next
    If $result = "" Then return 0
    $returnString = StringSplit(StringTrimRight($result, 1), "|")
    Local $resultat[$returnString[0]+1][2]
    $resultat[0][0] = $returnString[0]
    For $i = 1 To Ubound($returnString)-1
        $array = StringRegExp($returnString[$i], '(.*),(.*)', 1, 1)
        $resultat[$i][0] = $array[0]
        $resultat[$i][1] = $array[1]
    Next
    return $resultat
EndFunc
Cette fonction gère les variations (0-255), permet d'ignorer des pixels (exemple : "9,100|10,100|11,100"), permet de rechercher les pixels dans un rectangle défini et retourne le résultat dans un tableau 2D.
Explication de l'utilisation :
Les 4 premiéres valeurs sont les coordonnées du rectangle de recherche (vous connaissez sans doute), ensuite il faut indiquer la couleur (vous connaissez aussi), ensuite la variation (valeur entre 0 et 255, 0 pour la valeur exacte et 255 pour toutes les couleurs. Je vous conseille de ne pas mettre de variation trop forte pour rester dans de bons résultats), ensuite les exceptions ("x,y|x2,y2", il faut les séparer avec une barre verticale) et pour finir la commande à executer à chaque pixel trouvé (utiliser les mot clé $X et $Y).
Explication du résultat :
$test[0][0] : renvoi le nombre total de pixels trouvés
$test[1][0] : renvoi la valeur x du premier résultat
$test[1][1] : renvoi la valeur y du premier résultat
$test[2][0] : renvoi la valeur x du second résultat
$test[2][1] : renvoi la valeur y du second résultat
Exemple d'utilisation :
Code : Tout sélectionner
$test = PixelSearchList(9, 99, 11, 101, "0xCCCCCC", 0, "9,100|10,100|11,100")
If $test <> 0 Then
    MsgBox(0, "", "Il y a " & $test[0][0] & " résultats.")
    _ArrayDisplay($test)
    For $i = 1 To Ubound($test)-1
        MsgBox(0, "Résultat n°" & $i, "x : " & $test[$i][0] & @CRLF & "y : " & $test[$i][1])
    Next
EndIf
____________________________________________________________________________________________________________________
CreateListByRect permet de créer une liste de pixels à partir de coordonné d'un rectangle. (comptatible avec PixelSearchList et CoordMoreProchByList)
► Afficher le texteCreateListByRect
Code : Tout sélectionner
Func CreateListByRect($gauche, $haut, $droit, $bas)
    Local $result = ""
    For $h = 0 To $bas - $haut
        For $l = 0 To $droit - $gauche
            $result &= $gauche + $l & "," & $haut + $h & "|"
        Next
    Next
    Return StringTrimRight($result, 1)
EndFunc
Code : Tout sélectionner
$machin = PixelSearchList(0, 0, 10, 10, 0x000000, 0, CreateListByRect(3, 3, 5, 10), "MouseMove($X, $Y)")
Ignorera le rectangle rouge : 
1 2 3 4 5 6 7 8 9 10
1 
OOOOOOOOOO
2 
OOOOOOOOOO
3 
OOOOOOOOOO
4 
OOOOOOOOOO
5 
OOOOOOOOOO
6 
OOOOOOOOOO
7 
OOOOOOOOOO
8 
OOOOOOOOOO
9 
OOOOOOOOOO
10
OOOOOOOOOO
____________________________________________________________________________________________________________________
CoordMoreProchByList retourne le pixel le plus près d'un autre depuis une liste, euh c'est pas claire tous ca ... (Voir exemple d'utilisation)
► Afficher le texteCoordMoreProchByList
Code : Tout sélectionner
Func CoordMoreProchByList($X, $Y, $list)
    $arrayList = StringSplit($list, "|", 2)
    Local $resultat[Ubound($arrayList)][3]
    For $i = 0 To UBound($arrayList) - 1
        $array = StringRegExp($arrayList[$i], '(.*),(.*)', 1, 1)
        $resultat[$i][0] = $array[0]
        $resultat[$i][1] = $array[1]
        If $resultat[$i][0] > $X Then
            If $resultat[$i][1] > $Y Then
                $resultat[$i][2] = ($resultat[$i][0]-$X) + ($resultat[$i][1]-$Y)
            Else
                $resultat[$i][2] = ($resultat[$i][0]-$X) + ($Y-$resultat[$i][1])
            EndIf
        Else
            If $resultat[$i][1] > $Y Then
                $resultat[$i][2] = ($X-$resultat[$i][0]) + ($resultat[$i][1]-$Y)
            Else
                $resultat[$i][2] = ($X-$resultat[$i][0]) + ($Y-$resultat[$i][1])
            EndIf
        EndIf
    Next
    Local $resultatFinal[2] = [$resultat[0][0], $resultat[0][1]]
    return $resultatFinal
EndFunc
Code : Tout sélectionner
$LePlusPres = CoordMoreProchByList(10, 20, "15,18|152,14|48,59")
MsgBox(0, "", $LePlusPres[0] & ", " & $LePlusPres[1])
Parmi les pixels 
10,20, 
15,80, 
152,14 et 
48,59 lequel est le plus près des coordonnés 
10,20.
____________________________________________________________________________________________________________________
PixelSearchListResultToList permet de convertir un résultat de PixelSearchList en liste pour ensuite pouvoir utiliser avec CoordMoreProchByList (exemple : trouver le pixel bleu le plus près de 600,85) ou pour ignorer les résultats ensuite dans un autre PixelSearchList.
► Afficher le textePixelSearchListResultToList
Code : Tout sélectionner
Func PixelSearchListResultToList($result)
    Local $return = ""
    For $i = 1 To $result[0][0]
        $return &= $result[$i][0] & "," & $result[$i][1] & "|"
    Next
    return StringTrimRight($return, 1)
EndFunc
Code : Tout sélectionner
$test = PixelSearchList(9, 99, 11, 101, "0xCCCCCC", 0, "9,100|10,100|11,100")
If $test <> 0 Then
    MsgBox(0, "Résultat de PixelSearchListResultToList", PixelSearchListResultToList($test))
EndIf