Page 1 sur 1

[Ex] Fonction de comparaison de couleurs entres deux pixels

Posté : sam. 24 sept. 2011 23:44
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?

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

Posté : mar. 27 sept. 2011 21:49
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