Texte de couleur 'contrastée' avec le fond d'un picture box
2 réponses
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..
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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_' ;
"Driss HANIB" <dhanib@club-internet.fr> a écrit dans le message de
news:ePAkLhKWGHA.840@TK2MSFTNGP04.phx.gbl...
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_' ; _no_spam_jean_marc_n2@yahoo.fr
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_' ;
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_' ;
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" <NO_SPAM_jean_marc_n2@yahoo.fr> a écrit dans le message de
news:44340cfe$0$29384$ba620e4c@news.skynet.be...
"Driss HANIB" <dhanib@club-internet.fr> a écrit dans le message de
news:ePAkLhKWGHA.840@TK2MSFTNGP04.phx.gbl...
> 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_' ; _no_spam_jean_marc_n2@yahoo.fr
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_' ;