# Gnral Dveloppement > Algorithme & Mathmatiques > Traitement d'images >  Calculer un bon contraste d'une couleur

## Cypselos

Bonjour.

J'ai une zone de texte. La couleur de l'arrire-plan de cette zone peut tre choisie par l'utilisateur. J'aimerais que le texte qui s'y trouve soit toujours lisible, qu'elle que soit la couleur d'arrire-plan. J'aurais donc besoin de pouvoir dterminer une couleur qui contraste bien avec une autre, dont j'ai forcment le code couleur.

J'ai pas forcment besoin de quelque chose de compliqu, mais d'un rsultat acceptable.

Merci d'avance.

----------


## pseudocode

> J'ai pas forcment besoin de quelque chose de compliqu, mais d'un rsultat acceptable.


Soit R,G,B les 3 composantes de la couleur de fond (entre 0 et 255)

si  ((R+G+B)/3)<128 alors texte=BLANC sinon texte=NOIR

----------


## Cypselos

> Soit R,G,B les 3 composantes de la couleur de fond (entre 0 et 255)
> 
> si  ((R+G+B)/3)<128 alors texte=BLANC sinon texte=NOIR


Merci, cela me convient parfaitement.

----------


## rebel64

La perception de chaque couleur de base n'est pas la mme :
Le bleu parait plus sombre que le rouge et le rouge plus sombre que le vert.

Formule pour calculer le niveau de gris d'une couleur:

0.11 * B + 0.30 * R  + 0.59 * G

Tu peux utiliser une formule approximative plus simple:

(B + 2 * R + 4 * G) / 7

----------


## Cypselos

> La perception de chaque couleur de base n'est pas la mme :
> Le bleu parait plus sombre que le rouge et le rouge plus sombre que le vert.
> 
> Formule pour calculer le niveau de gris d'une couleur:
> 
> 0.11 * B + 0.30 * R  + 0.59 * G
> 
> Tu peux utiliser une formule approximative plus simple:
> 
> (B + 2 * R + 4 * G) / 7


Trs intressant. Merci!

----------


## Heirem

Bonsoir !
Au dpart je me suis bas sur la formule indiqu ici et qui fonctionnait bien ... sauf pour certaines couleurs. Pour lesquelles le rouge et le vert taient trop sombre et donnait une couleur de contraste innadapte.

Alors j'ai essay d'appliquer un coef de pondration mais alors l ... il a fallut sortir les aspirines !

Finalement c'est sur le site du W3c ici que j'ai trouv la formule idale.

Alors pour ceux qui comme moi passerait par ici la voil :

SI ((Red value X 299) + (Green value X 587) + (Blue value X 114)) / 1000 < 125 ALORS AFFICHER DU BLANC (#FFF) SINON du NOIR (#000)

Heirem
http://heirem.fr

----------


## Mac LAK

Tu peux aussi tenter de toujours crire dans la couleur complmentaire de celle du fond. Tant que tu n'est pas dans des gris moyens (vu qu'ils sont quasiment leurs propres complmentaire), c'est en gnral bien lisible.
Afficher en mode XOR produit galement souvent de bons rsultats sur un fond uni (c'est nettement plus dgueu sur une image).

----------


## dverdin

> Bonsoir !
> Finalement c'est sur le site du W3c ici que j'ai trouv la formule idale.
> 
> Alors pour ceux qui comme moi passerait par ici la voil :
> 
> SI ((Red value X 299) + (Green value X 587) + (Blue value X 114)) / 1000 < 125 ALORS AFFICHER DU BLANC (#FFF) SINON du NOIR (#000)
> 
> Heirem
> http://heirem.fr


Cette formule marche comme un charme, merci beaucoup !

----------


## ijk-ref

> Soit R,G,B les 3 composantes de la couleur de fond (entre 0 et 255)
> 
> si  ((R+G+B)/3)<128 alors texte=BLANC sinon texte=NOIR


L'algo le plus logique (je trouve) pour maximiser encore plus le contraste serait d'effectuer ceci sur chaque canal couleur (RGB) indpendamment.

Ainsi :


> if(background.R<128) text.R=255; else text.R=0;
> if(background.G<128) text.G=255; else text.G=0;
> if(background.B<128) text.B=255; else text.B=0;

----------


## pseudocode

> L'algo le plus logique (je trouve) pour maximiser encore plus le contraste serait d'effectuer ceci sur chaque canal couleur (RGB) indpendamment.


Si tu aimes crire en Vert sur fond Mauve, effectivement.  ::roll:: 

Fond = {255,0,255} ==> Text = {0,255,0}

----------


## ijk-ref

Nan je prfre crire en jaune sur fond bleu !  ::mrgreen:: 

Juste pour la forme et le plaisir de donner une autre solution, j'ai donn un algo qui maximise encore plus le contraste... ensuite les gots et le couleurs...  :;): 

Edit :  non en fait c'est faux ce que je dis ! Dans ton cas "vert/mauve" par exemple on se retrouve avec un fond et un texte de luminosit trs voisine. Donc mon algo il est nul... et moche ! ::aie::

----------


## pseudocode

> Edit :  non en fait c'est faux ce que je dis ! Dans ton cas "vert/mauve" par exemple on se retrouve avec un fond et un texte de luminosit trs voisine. Donc mon algo il est nul... et moche !


Quand on parle de "contraste", on fait effectivement rfrence aux variations d'intensit lumineuse. D'o le fait que dans les posts prcdents nous proposons tous des formules  base de calcul de luminosit.  :;):

----------

