Voici ma fonction :
► Afficher le textePixelSearchList
Code : Tout sélectionner
#include <Color.au3>
#include <Array.au3>
Func PixelSearchList($gauche, $haut, $droit, $bas, $hSearchCouleur, $variation = 0, $exception = "")
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 _ArrayFindAll($arrayException, $gauche + $l & "," & $haut + $h) = -1 Then
$hCouleur = "0x" & Hex(PixelGetColor($gauche + $l, $haut + $h), 6)
$couleur = _ColorGetRGB($hCouleur)
If $hCouleur = $hSearchCouleur Then
$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
$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)
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[1][0] : renvoi la valeur x du second résultat
$test[1][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