[R] Une image est-elle plus blanche ou plus noire ?

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Rancar
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 11 avr. 2013 23:46
Localisation : Bruxelles
Status : Hors ligne

[R] Une image est-elle plus blanche ou plus noire ?

#1

Message par Rancar »

Bonsoir,

Je suis en train de réaliser un petit projet en AutoIT et pour cela, j'aurais besoin de savoir comment faire pour déterminer si une image est plus blanche ou plus noire afin de pouvoir poser dessus un label de la couleur opposé (afin que celui-ci soit visible car du blanc sur du blanc...)
J'ai regardé du côté de PixelChecksum pour détermine la couleur moyenne du bas droit d'une image (ou de l'écran c'est encore mieux) mais ça ne m'avance pas du tout...

Auriez-vous une idée ? :)
Merci d'avance.

Cordialement,
Rancar :mrgreen:
Modifié en dernier par Rancar le mar. 04 mars 2014 20:11, modifié 1 fois.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Une image est-elle plus blanche ou plus noire ?

#2

Message par jguinch »

Je suis pas un pro de GDI+ mais bon...
En fait, je pense qu'il faut que tu détermines la couleur moyenne de ton image. Pour ça, j'ai trouvé des scripts, mais ils sont très longs car ils parcourent toute l'image pixel par pixel...
Mon idée serait plutôt de dupliquer et redimensionner l'image en une image de 1 pixel x 1 pixel : du coup le ré-échantillonnage te donnerait un pixel de couleur "moyenne" approximative.
Je ne sais pas si cette technique sera vraiment fiable, mais tu peux essayer.

Je t'ai fait un petit bout de script, si tu veux regarder. Ma fonction _ImageAverageColor retourne la couleur moyenne (en utilisant le redimensionnement de 1x1) au format RRGGBB.
Il te restera (si ça convient) à déduire d'après cette valeur si l'image est plutôt claire ou plutôt foncée.
► Afficher le texte
L'idéal serait même de trouver la couleur moyenne non pas pour l'image complète mais uniquement pour la zone concernée (là où tu veux mettre le texte). Tu pourra utiliser _GDIPlus_BitmapCloneArea pour ça.

Bon, c'est du bricolage, mais j'ai pas trouvé mieux :?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Rancar
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 11 avr. 2013 23:46
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Une image est-elle plus blanche ou plus noire ?

#3

Message par Rancar »

Tout d'abord, merci de votre réponse :)

Premièrement, je n'ai pas très bien compris la différence entre votre fonction et "PixelChecksum" qui devrait aussi retourner la couleur moyenne, non ?

Deuxièmement, comment faire pour déterminer si la valeur 0x...... est plus noire ou plus blanche ? ^^
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Une image est-elle plus blanche ou plus noire ?

#4

Message par jguinch »

PixelChecksum calcul le checksum d'une zone de l'écran. Ma fonction calcul la couleur moyenne d'une image.
C'est bien ça que tu voulais ?

Pour déduire si la couleur est plutôt noire ou plutôt blanche, ça devrait être assez simple. Il faut, je pense, faire la moyenne des trois couleurs, puis tester si cette moyenne est plus proche de "00" (noir) ou "FF" (blanc) - sachant que la tranche du foncé va de "00" à "77" et la tranche du clair de "88" à "FF".
Ainsi, on peut imaginer un truc du genre :

Code : Tout sélectionner

$color = "FC2398"
; Si (FC + 23 + 98 ) /3 est inférieur ou égal à la valeur "77" (hexa), alors c'est foncé, sinon clair
$tendance = ( (Dec ( StringMid($color, 1, 2) ) + Dec ( StringMid($color, 3, 2) ) + Dec ( StringMid($color, 5, 2) ) ) / 3 <= Dec("77") ) ? ("noir") : ("fonce")
MsgBox(0, "", $tendance)
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2284
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Une image est-elle plus blanche ou plus noire ?

#5

Message par jchd »

A noter que pour convertir une couleur de RGB en niveau de gris en respectant la subtilité de la perception visuelle humaine, puisque cela semble être une étape vers le but, il faut pondérer les composantes RGB. La chose est subjective et il existe plusieurs standards de représentation des couleurs et, du coup, au moins autant de méthodes de conversion. Un point d'entrée élémentaire sur le sujet.

Pour faire des sous-titres lisibles, on peut aussi mettre le sous-titre sur un fond de couleur et transparence adaptées. On voit ça souvent à la télé, par exemple. Pour moi, c'est la solution la plus efficace.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Rancar
Niveau 5
Niveau 5
Messages : 105
Enregistré le : jeu. 11 avr. 2013 23:46
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Une image est-elle plus blanche ou plus noire ?

#6

Message par Rancar »

Jguinch, votre version semble fonctionner parfaitement ! :D
Merci beaucoup :)

Jchd > Ce n'est pas très esthétique d'avoir un fond couleur sur un label positionné une image :/
Mais en tout cas, c'est plus facile à mettre en place ^^

Sujet résolu, encore merci :)
Répondre