Recherche de couleur par écart sur plusieurs points (screen.find_color)
Déclaration
coordonnée horizontale, coordonnée verticale = screen.find_color({
[find_all = rechercher plusieurs résultats,]
[max_results = nombre maximal de résultats,]
[max_miss = nombre maximal de points manqués,]
{coordonnée horizontale du point de départ, coordonnée verticale du point de départ, {couleur du point de départ[, écart du point de départ]}},
{coordonnée horizontale du point décalé\*, coordonnée verticale du point décalé\*, {couleur du point décalé\*, écart du point décalé\*}},
{coordonnée horizontale du point décalé\*, coordonnée verticale du point décalé\*, {couleur du point décalé\*, écart du point décalé\*}},
...
} [, gauche, haut, droite, bas ])
Paramètres
- rechercher plusieurs résultats
Booléen, paramètre facultatif ; lorsque ce champ vaut true, renvoie une table contenant toutes les positions correspondantes dans la zone, sous la forme{{x1, y1}, {x2, y2}, ...}; false par défaut - nombre maximal de résultats
Entier, paramètre facultatif ; lorsque find_all (rechercher plusieurs résultats) vaut true, indique le nombre maximal de résultats, au plus 1000, 100 par défaut - nombre maximal de points manqués
Entier, paramètre facultatif, nombre maximal de points qui peuvent ne pas correspondre ; 0 par défaut, ce qui exige la correspondance de tous les points - coordonnée horizontale du point de départ, coordonnée verticale du point de départ
Entiers, coordonnées de départ ; elles ne limitent pas la recherche de couleur à ce point, mais donnent seulement une coordonnée relative aux positions décalées. Si aucun décalage n’est nécessaire, indiquez 0, 0 - couleur du point de départ
Entier, couleur du point à rechercher - écart du point de départ
Entier, écart maximal de la couleur à rechercher (ou écart de teinte) ; une valeur supérieure à 0xff000000 active le mode de correspondance inversée - coordonnée horizontale du point décalé*, coordonnée verticale du point décalé*
Entiers, coordonnées d’une position décalée - couleur du point décalé*
Entier, couleur à comparer à la position décalée - écart du point décalé*
Entier, écart de couleur (ou écart de teinte) de la position décalée ; une valeur supérieure à 0xff000000 active le mode de correspondance inversée - gauche, haut, droite, bas
Entiers, paramètres facultatifs, zone de recherche, plein écran par défaut
Valeur de retour
- coordonnée horizontale, coordonnée verticale
Entiers, coordonnées du premier point de la couleur correspondante ; renvoie -1, -1 si la recherche échoue
Description
Recherche en mode d’écart de couleur (ou écart de teinte) et obtient la position de la première structure de couleurs multipoint entièrement correspondante dans la zone
Les paramètres et valeurs de retour des coordonnées de cette fonction dépendent du système de coordonnées initialisé parscreen.init
Écart de couleur (ou écart de teinte) sert généralement à représenter une plage de couleurs. Une couleur accompagnée d’un écart de couleur (ou écart de teinte) désigne toutes les couleurs situées dans les plages de décalage rouge, vert et bleu de cette couleur
Lorsque l’écart de 0x456789 est 0x123456, cela représente les plages positives et négatives 0x12 du rouge, 0x34 du vert et 0x56 du bleu de 0x456789
Autrement dit, la plage rouge est 0x45 ± 0x12, la plage verte est 0x67 ± 0x34 et la plage bleue est 0x89 ± 0x56, comme dans le tableau ci-dessous
| Négatif | Positif |
|---|---|
| 0x45 - 0x12 = 0x33 | 0x45 + 0x12 = 0x57 |
| 0x67 - 0x34 = 0x33 | 0x67 + 0x34 = 0x9B |
| 0x89 - 0x56 = 0x33 | 0x89 + 0x56 = 0xDF |
La paire 1193046 mentionnée ci-dessus représente toutes les couleurs comprises entre 0x333333 et 0x579BDF
Les nombres commençant par 0x sont des nombres hexadécimaux (Qu’est-ce qu’un nombre hexadécimal ?)
Exemple
x, y = screen.find_color({
{ 0, 0, {0xec1c23, 0x000000}},
{ 12, -3, {0xffffff, 0x101010}},
{ 5, -18, {0x00adee, 0x123456}},
{ -1, -10, {0xffc823, 0x101001}},
{ 2, -34, {0xa78217, 0x101001}},
{ 12, -55, {0xd0d2d2, 0x101001}},
}, 0, 0, 100, 100)
--
--[[
Dans la zone allant du coin supérieur gauche 0, 0 au coin inférieur droit 100, 100, trouve le premier point exactement similaire à 0xec1c23 (écart de couleur 0)
et dont la couleur à la position relative (12, -3) présente un écart inférieur à 0x101010 avec 0xffffff
et dont la couleur à la position relative (5, -18) présente un écart inférieur à 0x123456 avec 0x00adee
et ainsi de suite pour les autres points, jusqu’à obtenir un point correspondant
--]]
--
-- Voici le code équivalent :
--
x, y = screen.find_color({
{ 509, 488, {0xec1c23, 0x000000}},
{ 521, 485, {0xffffff, 0x101010}},
{ 514, 470, {0x00adee, 0x123456}},
{ 508, 478, {0xffc823, 0x101001}},
{ 511, 454, {0xa78217, 0x101001}},
{ 521, 433, {0xd0d2d2, 0x101001}},
}, 0, 0, 100, 100)
--
--[[
Dans la zone allant du coin supérieur gauche 0, 0 au coin inférieur droit 100, 100, trouve le premier point exactement similaire à 0xec1c23 (écart de couleur 0)
et dont la couleur à la position relative (521-509, 485-488) présente un écart inférieur à 0x101010 avec 0xffffff
et dont la couleur à la position relative (514-509, 470-488) présente un écart inférieur à 0x123456 avec 0x00adee
et ainsi de suite pour les autres points, jusqu’à obtenir un point correspondant
--]]
--
-- Sans retour à la ligne ni indentation, cela donne :
x, y = screen.find_color({ {0,0,{0xec1c23,0x000000} },{12,-3, {0xffffff,0x101010} },{5,-18, {0x00adee,0x123456} },{-1,-10,{0xffc823,0x101001} },{2,-34,{0xa78217,0x101001} },{12,-55,{0xd0d2d2,0x101001} }, },0,0,100,100)
--
x, y = screen.find_color({ -- Démonstration de la correspondance inversée, exécutable sur l’écran d’accueil d’un 5C pour obtenir un résultat
{ 516, 288, {0xffffff, 0x101010} },
{ 519, 286, {0xffffff, 0x101010} },
{ 521, 289, {0xffffff, 0x101010} },
{ 516, 296, {0xffffff, 0x101010} },
{ 522, 297, {0xffffff, 0x101010} },
{ 520, 295, {0xffffff, 0xff101010} }, -- Ce point ne correspond que si l’écart de couleur avec 0xffffff est supérieur à 0x101010, idem ci-dessous
{ 515, 291, {0xffffff, 0xff101010} },
{ 518, 284, {0xffffff, 0xff101010} },
{ 523, 298, {0xffffff, 0xff101010} },
{ 514, 298, {0xffffff, 0xff101010} },
{ 514, 296, {0xffffff, 0xff101010} },
}) -- Sans paramètres de zone, recherche sur tout l’écran
--
results = screen.find_color({ -- Démonstration du renvoi de toutes les correspondances dans la zone
{ 527, 278, {0xde1d26, 0x101010} },
{ 524, 285, {0x007aff, 0x101010} },
{ 555, 292, {0xe4ddc9, 0x101010} },
{ 536, 314, {0xffde02, 0x101010} },
{ 502, 291, {0xffde02, 0x101010} },
{ 502, 283, {0xe4ddc9, 0x101010} },
find_all = true, -- Ce champ renvoie toutes les positions correspondantes dans la zone, sous forme de table {{x1, y1}, {x2, y2}, ...}
}) -- Sans paramètres de zone, recherche sur tout l’écran