Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Texte de couleur 'contrastée' avec le fond d'un picture box

2 réponses
Avatar
Driss HANIB
Bonjour à tous,

je suis sur un programme d'emploi du temps qui me permets d'avoir à l'écran
et pour une même journée les emplois du temps de plusieurs personnes à la
fois.
Jusqu'à la tout va bien.
J'ai un picturebox par personne et je colorie et écrit à différents niveaux,
en fonction des horaires des rendez vous.
je gère tout cela à peu près, couplé à une base Access et je peux , grace à
jacques93 et 'Jean-Marc', importer les éventuels rendez vous (en tout cas la
trame) à partir de OUTLOOK.

Ceci étant dit, en fonction du type de rendez vous, j'ai déterminé des
couleurs qui apparaissent pour chaque rendez vous.

Cependant en fonction de la couleur du fond, la couleur du texte (noir pour
l'instant) se voit plus ou moins bien..
Aussi quelqu'un connait il le moyen pour une couleur de fond donnée , de
trouver la couleur la plus contrastée possible..

merci pour vos pistes

Driss

2 réponses

Avatar
Jean-Marc
"Driss HANIB" a écrit dans le message de
news:
Bonjour à tous,

je suis sur un programme d'emploi du temps qui me permets d'avoir à


l'écran
et pour une même journée les emplois du temps de plusieurs personnes à


la
fois.
Jusqu'à la tout va bien.
J'ai un picturebox par personne et je colorie et écrit à différents


niveaux,
en fonction des horaires des rendez vous.
je gère tout cela à peu près, couplé à une base Access et je peux ,


grace à
jacques93 et 'Jean-Marc', importer les éventuels rendez vous (en tout


cas la
trame) à partir de OUTLOOK.

Ceci étant dit, en fonction du type de rendez vous, j'ai déterminé des
couleurs qui apparaissent pour chaque rendez vous.

Cependant en fonction de la couleur du fond, la couleur du texte (noir


pour
l'instant) se voit plus ou moins bien..
Aussi quelqu'un connait il le moyen pour une couleur de fond donnée ,


de
trouver la couleur la plus contrastée possible..



Hello,

Tu peux essayer une heuristique qui ne marche pas trop mal:
- Soit R, V et B les composantes r,v et b du backcolor de ton
picturebox

Tu choisis comme ForeColor le composantes suivantes:
R1 = 255-R
V1 = 255-V
B1 = 255-B

Ca ne marche pas quand r,v et b sont simultanément proches de
la moyenne (128). Un moyen est de trapper ce cas est de mettre
en place une exception pour traiter ce cas en forçant du noir dans
ce cas par exmemple.

Ca peut donner:

If (r > 100 And r < 156) And _
(v > 100 And v < 156) And _
(b > 100 And b < 156) Then
Picture1.ForeColor = RGB(0, 0, 0)
Else
Picture1.ForeColor = RGB(255 - r, 255 - v, 255 - b)
End If

Ce n'est pas parfait, loin s'en faut mais ça donne des
résultats corrects.

Une autre façon est de faire la moyenne des RVB, ça te
donne un "gris équivalent":

M1 = (r+v+b)/3

Puis tu calcules:
D1=m1/2
D2=(128+m1)/2

tu calcules VG = Maximum(D1, D2)

puis enfin forecolor = RGB(VG, VG, VG)

Ca va te donner le niveau de gris le plus contrasté par rapport à la
couleur de fond.


Ca donne ceci:
m1 = (r + v + b) / 3
d1 = m1 / 2
d2 = (128 + m1) / 2

If Abs(d1 - m1) > Abs(d2 - m1) Then
vg = 255 - d1
Else
vg = 255 - d2
End If
Picture1.ForeColor = RGB(vg, vg, vg)

Je préfère cette méthode, car elle donne des résultats moins "flashy",
je hais les interfaces "flashy".

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;
Avatar
Driss HANIB
merci jean marc

j'avais entre temps regardé ta première mléthode et j'avais vu également le
problème au voisinage de la moitié, choisisssant pour ma part de mettre en
blanc plutot qu'en noir.
Mais effectivement : un peu flashy comme tu dis.
je vais tester ta deuxième méthode

je te tiens au courant

Driss
"Jean-Marc" a écrit dans le message de
news:44340cfe$0$29384$
"Driss HANIB" a écrit dans le message de
news:
> Bonjour à tous,
>
> je suis sur un programme d'emploi du temps qui me permets d'avoir à
l'écran
> et pour une même journée les emplois du temps de plusieurs personnes à
la
> fois.
> Jusqu'à la tout va bien.
> J'ai un picturebox par personne et je colorie et écrit à différents
niveaux,
> en fonction des horaires des rendez vous.
> je gère tout cela à peu près, couplé à une base Access et je peux ,
grace à
> jacques93 et 'Jean-Marc', importer les éventuels rendez vous (en tout
cas la
> trame) à partir de OUTLOOK.
>
> Ceci étant dit, en fonction du type de rendez vous, j'ai déterminé des
> couleurs qui apparaissent pour chaque rendez vous.
>
> Cependant en fonction de la couleur du fond, la couleur du texte (noir
pour
> l'instant) se voit plus ou moins bien..
> Aussi quelqu'un connait il le moyen pour une couleur de fond donnée ,
de
> trouver la couleur la plus contrastée possible..

Hello,

Tu peux essayer une heuristique qui ne marche pas trop mal:
- Soit R, V et B les composantes r,v et b du backcolor de ton
picturebox

Tu choisis comme ForeColor le composantes suivantes:
R1 = 255-R
V1 = 255-V
B1 = 255-B

Ca ne marche pas quand r,v et b sont simultanément proches de
la moyenne (128). Un moyen est de trapper ce cas est de mettre
en place une exception pour traiter ce cas en forçant du noir dans
ce cas par exmemple.

Ca peut donner:

If (r > 100 And r < 156) And _
(v > 100 And v < 156) And _
(b > 100 And b < 156) Then
Picture1.ForeColor = RGB(0, 0, 0)
Else
Picture1.ForeColor = RGB(255 - r, 255 - v, 255 - b)
End If

Ce n'est pas parfait, loin s'en faut mais ça donne des
résultats corrects.

Une autre façon est de faire la moyenne des RVB, ça te
donne un "gris équivalent":

M1 = (r+v+b)/3

Puis tu calcules:
D1=m1/2
D2=(128+m1)/2

tu calcules VG = Maximum(D1, D2)

puis enfin forecolor = RGB(VG, VG, VG)

Ca va te donner le niveau de gris le plus contrasté par rapport à la
couleur de fond.


Ca donne ceci:
m1 = (r + v + b) / 3
d1 = m1 / 2
d2 = (128 + m1) / 2

If Abs(d1 - m1) > Abs(d2 - m1) Then
vg = 255 - d1
Else
vg = 255 - d2
End If
Picture1.ForeColor = RGB(vg, vg, vg)

Je préfère cette méthode, car elle donne des résultats moins "flashy",
je hais les interfaces "flashy".

--
Jean-marc
Tester mon serveur (VB6) => http://myjmnhome.dyndns.org
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;