Variations de couleur minime d'un pixel ?
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
Variations de couleur minime d'un pixel ?
Bonjour !
Je suis venu hier, mais je reviens aujourd'hui pour (encore), trouver réponse à ma question qui me bloque la route
Existe-t-il une fonction, ou peut-on faire en sorte que même si un pixel change de quelques teintes, le programme s’exécute tout de même ?
Si par exemple le Rouge est plus élevé de 3-4, ou pour le Bleu, le Vert, sans que j'ai à ne rentrer une par une ses différentes teintes, qui représente énormément de "couleurs" différentes mais juste à définir un seuil de "tolérance?" où le programme continuera même si il y a une petite variation de la couleur hexadécimal.
J'espère qu'une personne viendra à mon secours,
Merci encore !
Je suis venu hier, mais je reviens aujourd'hui pour (encore), trouver réponse à ma question qui me bloque la route
Existe-t-il une fonction, ou peut-on faire en sorte que même si un pixel change de quelques teintes, le programme s’exécute tout de même ?
Si par exemple le Rouge est plus élevé de 3-4, ou pour le Bleu, le Vert, sans que j'ai à ne rentrer une par une ses différentes teintes, qui représente énormément de "couleurs" différentes mais juste à définir un seuil de "tolérance?" où le programme continuera même si il y a une petite variation de la couleur hexadécimal.
J'espère qu'une personne viendra à mon secours,
Merci encore !
- TommyDDR
- Modérateur
- Messages : 2086
- Enregistré le : mar. 22 juil. 2008 21:55
- Localisation : Nantes
- Status : Hors ligne
Re: Variations de couleur minime d'un pixel ?
Bonjour,
Avez-vous plus de détails concernant votre programme ? Nous ne sommes malheureusement pas devins, nous ne savons pas quelles fonctions vous utilisez et sans cela, nous ne pourrons vous aider sans faire de spéculation (qui est, dans la plupart des cas, une perte de temps pour ceux qui veulent vous aider).
Le mieux est de poster un code fonctionnel reproduisant votre problème
Avez-vous plus de détails concernant votre programme ? Nous ne sommes malheureusement pas devins, nous ne savons pas quelles fonctions vous utilisez et sans cela, nous ne pourrons vous aider sans faire de spéculation (qui est, dans la plupart des cas, une perte de temps pour ceux qui veulent vous aider).
Le mieux est de poster un code fonctionnel reproduisant votre problème
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
Re: Variations de couleur minime d'un pixel ?
Bien sûr cela va de soit
Tant que la couleur ne change pas, la fonction ne se termine pas. Dans la fonction, quand je l'appelle "397C64" est la couleur en Hexadécimal, et justement j'aimerais que $Hexa prenne des valeurs comprises entre différentes teintes de celle-ci
Merci d'avoir répond aussi vite
Code : Tout sélectionner
Clique(409,110,"397C64")
Func Clique($pos1,$pos2,$Hexa)
$CliqueColor = PixelGetColor($pos1, $pos2)
$Color = Hex(CliqueColor, 6)
If $Color = $Hexa Then
MouseClick("left",$pos1, $pos2, 1)
sleep(500)
While $Color = $Hexa
MouseMove(0,0,1)
sleep(500)
$CliqueColor= PixelGetColor($pos1, $pos2)
$Color = Hex($CliqueColor, 6)
WEnd
EndIf
EndFunc
Merci d'avoir répond aussi vite
Re: Variations de couleur minime d'un pixel ?
Bonjour,
Je suggère de remplacer la condition:
$Color = $Hexa
par une condition de la forme:
distance(M, A) < rayon
Je m'explique:
-les couleurs sont modélisées par un cube de coté 256 (de 0 à 255)
- A est le point de coordonnée $Hexa, centre de la boule
- M est le point de coordonnées $Color
- rayon est la distance maximale à laquelle M peut s'écarter de A
- distance est une distance de l'espace: il y en a une infinité, celle qui fait les boules cubiques est:
d(M,N) = max(|XM-XN|, |YM-YN|, |ZM-ZN|)
A toi de jouer!
Je suggère de remplacer la condition:
$Color = $Hexa
par une condition de la forme:
distance(M, A) < rayon
Je m'explique:
-les couleurs sont modélisées par un cube de coté 256 (de 0 à 255)
- A est le point de coordonnée $Hexa, centre de la boule
- M est le point de coordonnées $Color
- rayon est la distance maximale à laquelle M peut s'écarter de A
- distance est une distance de l'espace: il y en a une infinité, celle qui fait les boules cubiques est:
d(M,N) = max(|XM-XN|, |YM-YN|, |ZM-ZN|)
A toi de jouer!
Re: Variations de couleur minime d'un pixel ?
Bonjour,
Tout d'abord merci de votre aide, je vois ce que vous voulez dire néanmoins je ne vois pas "rayon est la distance maximale à laquelle M peut s'écarter de A", c'est égale à la différence de teintes maximum ?
Je ne vois pas comment réaliser ceci non plus "d(M,N) = max(|XM-XN|, |YM-YN|, |ZM-ZN|)" et je ne sais pas si j'ai un niveau assez haut pour réaliser cela
Tout d'abord merci de votre aide, je vois ce que vous voulez dire néanmoins je ne vois pas "rayon est la distance maximale à laquelle M peut s'écarter de A", c'est égale à la différence de teintes maximum ?
Je ne vois pas comment réaliser ceci non plus "d(M,N) = max(|XM-XN|, |YM-YN|, |ZM-ZN|)" et je ne sais pas si j'ai un niveau assez haut pour réaliser cela
Re: Variations de couleur minime d'un pixel ?
Est-ce qu'il est possible de faire cela par exemple avec PixelSearch "d'analyer ce pixel" avec shade-variations (si la couleur est proche de celle indiqué à l'origine) et si elle est que cela continue la fonction ?
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: Variations de couleur minime d'un pixel ?
Bonsoir,
J'ai deux suggestions à proposer. Soit:
Ou bien ceci:
La valeur 39 est à choisir dans la tolérance des tons (ex: + 260 passe du blanc au jaune pâle)
A noter qu'il ne faut pas être en dessous de 0 (noir) et au dessus de 376926741 (blanc)
J'ai deux suggestions à proposer. Soit:
Clique(600,410,"FFFED8","FFFFFF")
Func Clique($pos1,$pos2,$HexaMini,$HexaMaxi)
$CliqueColor = PixelGetColor($pos1, $pos2)
$Color = Hex($CliqueColor, 6)
ConsoleWrite($Color & @CR)
If $Color >= $HexaMini And $Color <= $HexaMaxi Then
MouseClick("left",$pos1, $pos2, 1)
sleep(500)
While $Color >= $HexaMini And $Color <= $HexaMaxi
; MouseMove(0,0,1)
sleep(500)
$CliqueColor= PixelGetColor($pos1, $pos2)
$Color = Hex($CliqueColor, 6)
ConsoleWrite($Color & @CR)
WEnd
EndIf
EndFunc
Func Clique($pos1,$pos2,$HexaMini,$HexaMaxi)
$CliqueColor = PixelGetColor($pos1, $pos2)
$Color = Hex($CliqueColor, 6)
ConsoleWrite($Color & @CR)
If $Color >= $HexaMini And $Color <= $HexaMaxi Then
MouseClick("left",$pos1, $pos2, 1)
sleep(500)
While $Color >= $HexaMini And $Color <= $HexaMaxi
; MouseMove(0,0,1)
sleep(500)
$CliqueColor= PixelGetColor($pos1, $pos2)
$Color = Hex($CliqueColor, 6)
ConsoleWrite($Color & @CR)
WEnd
EndIf
EndFunc
Ou bien ceci:
Clique1(600,410,"FFFFD8")
Func Clique($pos1,$pos2,$Hexa)
$CliqueColor = PixelGetColor($pos1, $pos2)
$Color = Hex($CliqueColor, 6)
ConsoleWrite($Color & @CR)
$decA = Dec($Hexa)
If $decA - 39 > 0 Then ;Dec(0x000000) = 0
$HexaMini = Hex($decA - 39,6)
Else
$HexaMini = "0x000000"
EndIf
If $decA + 39 < 376926741 Then ;Dec(0xFFFFFF) = 376926741
$HexaMaxi = Hex($decA + 39 ,6)
Else
$HexaMaxi = "0xFFFFFF"
EndIf
ConsoleWrite($HexaMini &">>"& $HexaMaxi & @CR)
If $Color >= $HexaMini And $Color <= $HexaMaxi Then
MouseClick("left",$pos1, $pos2, 1)
sleep(500)
While $Color >= $HexaMini And $Color <= $HexaMaxi
; MouseMove(0,0,1)
sleep(500)
$CliqueColor= PixelGetColor($pos1, $pos2)
$Color = Hex($CliqueColor, 6)
ConsoleWrite($Color & @CR)
WEnd
EndIf
EndFunc
Func Clique($pos1,$pos2,$Hexa)
$CliqueColor = PixelGetColor($pos1, $pos2)
$Color = Hex($CliqueColor, 6)
ConsoleWrite($Color & @CR)
$decA = Dec($Hexa)
If $decA - 39 > 0 Then ;Dec(0x000000) = 0
$HexaMini = Hex($decA - 39,6)
Else
$HexaMini = "0x000000"
EndIf
If $decA + 39 < 376926741 Then ;Dec(0xFFFFFF) = 376926741
$HexaMaxi = Hex($decA + 39 ,6)
Else
$HexaMaxi = "0xFFFFFF"
EndIf
ConsoleWrite($HexaMini &">>"& $HexaMaxi & @CR)
If $Color >= $HexaMini And $Color <= $HexaMaxi Then
MouseClick("left",$pos1, $pos2, 1)
sleep(500)
While $Color >= $HexaMini And $Color <= $HexaMaxi
; MouseMove(0,0,1)
sleep(500)
$CliqueColor= PixelGetColor($pos1, $pos2)
$Color = Hex($CliqueColor, 6)
ConsoleWrite($Color & @CR)
WEnd
EndIf
EndFunc
A noter qu'il ne faut pas être en dessous de 0 (noir) et au dessus de 376926741 (blanc)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- TommyDDR
- Modérateur
- Messages : 2086
- Enregistré le : mar. 22 juil. 2008 21:55
- Localisation : Nantes
- Status : Hors ligne
Re: Variations de couleur minime d'un pixel ?
@walkson : votre solution ne peut marcher, en effet, si c'est la composante rouge qui varie ne serai-ce que d'une teinte, votre script ne fonctionnera pas.
Ce qu'il faut faire, c'est de décomposer votre couleur en 3 composante, de comparer chaque composantes entre elles, d’additionner les valeurs absolues entre elle, cela vous donnera l'écart entre les deux
Ce qu'il faut faire, c'est de décomposer votre couleur en 3 composante, de comparer chaque composantes entre elles, d’additionner les valeurs absolues entre elle, cela vous donnera l'écart entre les deux
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
- walkson
- Modérateur
- Messages : 1020
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: Variations de couleur minime d'un pixel ?
Oui! en effet ma proposition était complètement foireuse...
Bon! je remets mon bonnet d'âne et mordiller ma botte de foin...
Bon! je remets mon bonnet d'âne et mordiller ma botte de foin...
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- orax
- Modérateur
- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: Variations de couleur minime d'un pixel ?
Je pense que oui (à vérifier).nograd a écrit :Est-ce qu'il est possible de faire cela par exemple avec PixelSearch "d'analyer ce pixel" avec shade-variations (si la couleur est proche de celle indiqué à l'origine) et si elle est que cela continue la fonction ?
Une autre suggestion. J'ai utilisé la fonction Abs pour toujours avoir des nombres positifs dans les additions.
Abs(-1)
retourne 1.
; différence totale entre les couleurs 0x017FF0 et 0x037EFF = 18
; rouge = 2
; bleu = 1
; vert = 15
$pixelColor1 = 0x017FF0 ; 01 7F F0
$pixelColor2 = 0x037EFF ; 03 7E FF
; récupère les composantes des deux couleurs
$r1 = BitShift($pixelColor1, 16)
$g1 = BitShift(BitAND($pixelColor1, 0xFF00), 8)
$b1 = BitAND($pixelColor1, 0xFF)
$r2 = BitShift($pixelColor2, 16)
$g2 = BitShift(BitAND($pixelColor2, 0xFF00), 8)
$b2 = BitAND($pixelColor2, 0xFF)
$totalDiff = Abs($r1 - $r2) + Abs($g1 - $g2) + Abs($b1 - $b2) ; additionne les différences
ConsoleWrite($totalDiff & @CRLF)
; rouge = 2
; bleu = 1
; vert = 15
$pixelColor1 = 0x017FF0 ; 01 7F F0
$pixelColor2 = 0x037EFF ; 03 7E FF
; récupère les composantes des deux couleurs
$r1 = BitShift($pixelColor1, 16)
$g1 = BitShift(BitAND($pixelColor1, 0xFF00), 8)
$b1 = BitAND($pixelColor1, 0xFF)
$r2 = BitShift($pixelColor2, 16)
$g2 = BitShift(BitAND($pixelColor2, 0xFF00), 8)
$b2 = BitAND($pixelColor2, 0xFF)
$totalDiff = Abs($r1 - $r2) + Abs($g1 - $g2) + Abs($b1 - $b2) ; additionne les différences
ConsoleWrite($totalDiff & @CRLF)
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Re: Variations de couleur minime d'un pixel ?
Deux remarques, Orax:
1- La fonction _ColorGetRGB facilite les choses;
2- Je préfère mesurer la distance entre deux couleurs avec la 'formule':
d(M,N) = _max( abs(XM-XN), abs(YM-YN), abs(ZM-ZN) )
En effet, avec cette dernière distance les boules sont des cubes dont les cotés sont parallèles aux axes, comme le cube des couleurs.
Pour t'en persuader, colorie dans le plan, ( boule de centre O et de rayon 1)
1- l'ensemble des points M(x,y) tels que max(|x|, |y|) < 1
2- l'ensemble des points M(x,y) tels que |x| + |y| < 1
Ceci dit, pour approcher un point, n'importe quelle distance convient, y compris:
d(M,N) = sqrt( (XM-XN)² + (YM-YN)² + (ZM-ZN)² )
Pour d'autres problèmes c'est moins sûr!
Cordialement.
1- La fonction _ColorGetRGB facilite les choses;
2- Je préfère mesurer la distance entre deux couleurs avec la 'formule':
d(M,N) = _max( abs(XM-XN), abs(YM-YN), abs(ZM-ZN) )
En effet, avec cette dernière distance les boules sont des cubes dont les cotés sont parallèles aux axes, comme le cube des couleurs.
Pour t'en persuader, colorie dans le plan, ( boule de centre O et de rayon 1)
1- l'ensemble des points M(x,y) tels que max(|x|, |y|) < 1
2- l'ensemble des points M(x,y) tels que |x| + |y| < 1
Ceci dit, pour approcher un point, n'importe quelle distance convient, y compris:
d(M,N) = sqrt( (XM-XN)² + (YM-YN)² + (ZM-ZN)² )
Pour d'autres problèmes c'est moins sûr!
Cordialement.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: Variations de couleur minime d'un pixel ?
Pourquoi pas ? aucune raison que ça marche pas ^^nograd a écrit :Est-ce qu'il est possible de faire cela par exemple avec PixelSearch "d'analyer ce pixel" avec shade-variations (si la couleur est proche de celle indiqué à l'origine) et si elle est que cela continue la fonction ?
Code : Tout sélectionner
$x = 490
$y = 110
$aCoord = PixelSearch($x, $y, $x+1, $y+1, 0x397C64, 10)
If Not @error Then
; le pixel a la même couleur (tolérance 10)
Else
; couleur change
EndIf
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- orax
- Modérateur
- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: Variations de couleur minime d'un pixel ?
Merci mdanielm pour ces remarques. J'avais oublié l'existence de la fonction _ColorGetRGB. Pour le calcul, je viens de faire quelques recherches sur internet, mais j'ai peur que mon niveau en mathématiques soit bien trop faible.
J'ai essayé la formule ci-dessous, mais je ne sais pas si elle est correcte.
J'ai essayé la formule ci-dessous, mais je ne sais pas si elle est correcte.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Re: Variations de couleur minime d'un pixel ?
Oui, elle est correcte, c'est la distance entre deux points de l'espace:
MN = sqrt( (xM-xN)² + (yM-yN)² + (zM-zN)² )
c'est la méthode usuelle, pour laquelle l'ensemble des points M tel que AM=1 est la sphère de centre A et de rayon 1.
Pour les couleurs, si tu veux tester la proximité d'une couleur r,v,b d'une couleur r0,v0,b0 tu pourrais tester par exemple:
r0-10 < r < r0+10 ET v0-10 < v < v0+10 ET b0-10 < b < b0+10
Ce qui revient à tester si r,v,b est dans le cube de centre r0,v0,b0 et de coté 20.
Ces conditions s'écrivent plus simplement:
max ( abs(r-r0), abs(v-v0), abs(b-b0) ) < 10
Très utile pour subdiviser le cube des couleurs en plusieurs petits cubes, par exemple.
Bonsoir
MN = sqrt( (xM-xN)² + (yM-yN)² + (zM-zN)² )
c'est la méthode usuelle, pour laquelle l'ensemble des points M tel que AM=1 est la sphère de centre A et de rayon 1.
Pour les couleurs, si tu veux tester la proximité d'une couleur r,v,b d'une couleur r0,v0,b0 tu pourrais tester par exemple:
r0-10 < r < r0+10 ET v0-10 < v < v0+10 ET b0-10 < b < b0+10
Ce qui revient à tester si r,v,b est dans le cube de centre r0,v0,b0 et de coté 20.
Ces conditions s'écrivent plus simplement:
max ( abs(r-r0), abs(v-v0), abs(b-b0) ) < 10
Très utile pour subdiviser le cube des couleurs en plusieurs petits cubes, par exemple.
Bonsoir