Page 1 sur 1

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

Posté : mer. 19 févr. 2014 20:08
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:

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

Posté : jeu. 20 févr. 2014 21:10
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 :?

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

Posté : sam. 22 févr. 2014 17:09
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 ? ^^

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

Posté : sam. 22 févr. 2014 20:46
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)

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

Posté : sam. 22 févr. 2014 23:34
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.

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

Posté : mar. 04 mars 2014 20:10
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 :)