[Ex] Fonction de comparaison de couleurs entres deux pixels

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
clark17
Niveau 4
Niveau 4
Messages : 70
Enregistré le : ven. 23 sept. 2011 02:12
Status : Hors ligne

[Ex] Fonction de comparaison de couleurs entres deux pixels

#1

Message par clark17 »

Bonjour,

Je me suis fait une petite fonction pour comparer les couleurs entres deux pixels affichés à l'écran avec une marge d'erreur paramétrable.
Elle s'utilise avec trois paramètres, le premier pour le premier pixel a comparer, le deuxième pour le deuxième pixel à comparer et le troisième c'est la marge d'erreur paramètrable entre 0 identique et 254 infiniment différent.
Voici la fonction:

Code : Tout sélectionner

Func Comparecouleurpixel ($pixel1, $pixel2, $difference)
;Transforme la couleur de pixel 1 en hexadecimal
$result1 = Hex($pixel1, 6)
;Extrait la couleur rouge en Hexa
$rougehexa1 = StringLeft($result1, 2)
;Extrait la couleur verte en Hexa
$verthexa1 = StringLeft(StringTrimLeft($result1, 2), 2)
;Extrait la couleur Bleu en Hexa
$bleuhexa1 = StringRight($result1, 2)
;Convertit les hexadimales en décimales
$rouge1 = Dec($rougehexa1)
$vert1 = Dec($verthexa1)
$bleu1 = Dec($bleuhexa1)

;Transforme la couleur de pixel 2 en hexadecimal
$result2 = Hex($pixel2, 6)
;Extrait la couleur rouge en Hexa
$rougehexa2 = StringLeft($result2, 2)
;Extrait la couleur verte en Hexa
$verthexa2 = StringLeft(StringTrimLeft($result2, 2), 2)
;Extrait la couleur Bleu en Hexa
$bleuhexa2 = StringRight($result2, 2)
;Convertit les hexadimales en décimales
$rouge2 = Dec($rougehexa2)
$vert2 = Dec($verthexa2)
$bleu2 = Dec($bleuhexa2)

;Fait la comparaison avec la difference (et passe les nombres negatifs en positifs)
$soustractionrouge = StringReplace($rouge1 - $rouge2, "-", "")
$soustractionvert = StringReplace($vert1 - $vert2, "-", "")
$soustractionbleu = StringReplace($bleu1 - $bleu2, "-", "")
If $soustractionrouge > $difference or $soustractionvert > $difference or $soustractionbleu > $difference Then
    Return 1
    Else
    Return 0
EndIf
EndFunc
 
Et un exemple d'utilisation dans un script:

Code : Tout sélectionner

$testpixel1 = PixelGetColor(572 ,396, "[CLASS:Notepad]")
$testpixel2 = PixelGetColor(595 ,396, "[CLASS:Notepad]")
$test = Comparecouleurpixel($testpixel1, $testpixel2, 50)
MsgBox(0, "Si couleurs différentes =1 ou identiques = 0", $test)
 
Par contre une petite question me taraude, les variables que j'ai créé dans ma fonction elles sont global ou local à la fonction?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Ex] Fonction de comparaison de couleurs entres deux pix

#2

Message par mikell »

Tu te compliques la vie... :shock:
Pas testé mais en principe ça devrait marcher :

Code : Tout sélectionner

$test = Comparecouleurpixel(572, 396, 595, 396, "[CLASS:Notepad]", 50)
MsgBox(0, "Si couleurs différentes =0 ou identiques = 1", $test)
;=========================
Func Comparecouleurpixel ($x1, $y1, $x2, $y2, $hWnd, $difference)
Local $var, $coord 
$var = PixelGetColor ($x1, $y1, $hWnd)
$coord = PixelSearch($x2, $y2, $x2+1, $y2+1, $var, $difference, 1, $hWnd)
If not @error Then
    Return 1
Else
    Return 0
EndIf
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre