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
Exemple d'utilisation :
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
Exemple d'utilisation :
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
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, "Résultat de PixelSearchListResultToList", PixelSearchListResultToList($test))
EndIf