PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → [WD16] Calcul d'une couleur de texte par rapport à une couleur de fond
[WD16] Calcul d'une couleur de texte par rapport à une couleur de fond
Débuté par plec, 01 juin 2011 12:45 - 6 réponses
Posté le 01 juin 2011 - 12:45
Dans le planning, j'ai une couleur de fond X pour un rdv.
Je souhaiterais déterminer automatiquement par programmation une couleur appropriée pour le texte.
Par exemple si le fond est bleu ou rouge la couleur de texte sera blanche
si le fond est jaune la couleur du texte sera noire.

D'avance merci à tous ceux qui se pencheront sur ce petit problème
Membre enregistré
67 messages
Posté le 02 juin 2011 - 00:17
Bonjour,

Voici 2 moyens d'obtenir un résultat correct:
1/ avec RVB: je ne connais pas grand chose en colorimétrie, mais "intuitivement" pour chaque composante, j'ai calculé modulo(122+couleur,255).
2/ Avec TSL: en prenant la teinte opposée, ce procédé est plus simple au niveau calcul
Rouge, Vert, Bleu sont des entiers
Teinte, nSaturation, nLuminosité sont des entiers
InitHasard(Droite(HeureSys(), 2)) // initialisation avec les centièmes de seconde

// Utilisation de RVB
Rouge = Hasard(0,255)
Vert = Hasard(0,255)
Bleu = Hasard(0,255)
// Affichage dans le champ SAI_Abcisse
SAI_Abcisse = 1234
SAI_Abcisse..CouleurFond = RVB(Rouge,Vert,Bleu)
SAI_Abcisse..Couleur = RVB(Modulo(122+Rouge,255),Modulo(122+Vert,255),Modulo(122+Bleu,255))
// Affichage des 2 couleurs séparément
SAI_SansNom3..CouleurFond = RVB(Rouge,Vert,Bleu)
SAI_SansNom4..CouleurFond = RVB(Modulo(122+Rouge,255),Modulo(122+Vert,255),Modulo(122+Bleu,255))

// Utilisation de TSL
// avec les mêmes couleurs rouge vert et bleu que ci-dessus
Teinte = CouleurTeinte(RVB(Rouge,Vert,Bleu))
Saturation = CouleurSaturation(RVB(Rouge,Vert,Bleu))
Luminosité = CouleurLuminosité(RVB(Rouge,Vert,Bleu))
// Affichage dans le champ SAI_IdPoint
SAI_IdPoint = 1234
SAI_IdPoint..CouleurFond = TSL(Teinte,nSaturation,nLuminosité)
SAI_IdPoint..Couleur = TSL(Modulo(180+Teinte,360),nSaturation,nLuminosité)
// Affichage des 2 couleurs séparément
SAI_SansNom1..CouleurFond = TSL(Teinte,nSaturation,nLuminosité)
SAI_SansNom2..CouleurFond = TSL(Modulo(180+Teinte,360),nSaturation,nLuminosité)

Dans les 2 cas ça marche correctement.
A toi de tester

Bon dev,
Eric
Membre enregistré
67 messages
Posté le 02 juin 2011 - 00:21
Rectification: Il semble que ça fonctionne mieux en RVB

Eric
Membre enregistré
67 messages
Posté le 02 juin 2011 - 00:28
Voici une troisième solution qui semble encore meilleure: il s'agit d'inverser la luminosité!
// Autre utilisation de TSL
Teinte = CouleurTeinte(RVB(Rouge,Vert,Bleu))
nSaturation = CouleurSaturation(RVB(Rouge,Vert,Bleu))
nLuminosité = CouleurLuminosité(RVB(Rouge,Vert,Bleu))
// Affichage dans le champ SAI_IdPoint
SAI_Abcisse = 1234
SAI_Abcisse..CouleurFond = TSL(Teinte,Saturation,Luminosité)
SAI_Abcisse..Couleur = TSL(Teinte,Saturation,Modulo(50+Luminosité,100))
// Affichage des 2 couleurs séparément
SAI_SansNom3..CouleurFond = TSL(Teinte,Saturation,Luminosité)
SAI_SansNom4..CouleurFond = TSL(Teinte,Saturation,Modulo(50+Luminosité,100))


Eric
Membre enregistré
474 messages
Posté le 14 septembre 2011 - 13:41
Merci pour les exemples...
J'ai gagné du temps ! :-)
Posté le 24 mars 2022 - 14:45
Bonjour,

Je déterre ce sujet mais la solution ne fonctionne pas !
Exemple :
- couleur de fond = 5263440 (c'est un gris/noir) --> Texte en Blanc == OK
- couleur de fond = 16711808 (violet plus ou moins foncé) --> Texte en Noir == Pas bon

Avez-vous une solution fiable ?
Merci
Posté le 11 février 2026 - 08:42
Salut

cCouleurFond = HTMLVersRVB(UTILISATEUR.Couleur)
cCouleurTexte est Couleur = Blanc
SI CouleurLuminosité(cCouleurFond) > 75 ALORS cCouleurTexte = GrisFoncé

Simple efficasse.