olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 2010
-
6 sept. 2008 à 10:21
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 2010
-
8 sept. 2008 à 20:45
Bonjour
J'aimeras savoir s'il existe une methode ou si quelqu'un a une idée pour produire automatiquement une palette de couleur distincte
Je m'explique j'ai une collection d'element en nombre restrinct (< 20) et généralement < 10
J'aimerais a chaque element associer automatiquement une couleur sufisement distincte
Solution triviale : un tableau de couleur. C'est pas tres souple et forcément limité
Solution possible : Attribuer les valeurs RGB dans une boucle mais je ne maitrise pas sufisement la manipulation des couleurs pour trouver la formule magique pouvant me donner a chaque step des R G B produisant une couleur sufisement distincte de la precedente, sans faire n'importe quoi !
Mais peut-etre il y a t-il d'autres idées ou suggestions ?
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 6 sept. 2008 à 17:24
Salut,
Question intéressante ça, mais je n'ai pas de réponse toute faite sous la main.
Cependant une bonne piste, à mon avis, est de regarder du côté des normes d'accessiblité qui doivent probablement parler d'algorithme de vérification de contrastes de couleurs afin de rendre une interface graphique utilisable par des personnes présentant des difficultés visuelles.
Par contre je ne suis pas certains que ta piste de la génération automatique soit la meilleure : dans le contexte une couleur valide en terme de contraste peut s'avérer être particulièrement moche. Tu risques donc de devoir faire une petite validation manuelle quoi qu'il arrive.
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 6 sept. 2008 à 17:58
Merci Coq
Je te suis tres bien
Mais l'ajustement manuel je compte de toute façon le proposer
L'idée c'est de proposer un "preset" sur un echantion de +/- 5 a 15 valeurs
Ensuite l'utilisateur fait ce qu'il veut !
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 6 sept. 2008 à 19:06
Ok, donc c'est probablement une piste à suivre.
Il me semble que les papiers du W3C sur l'accessibilité proposent un moyen de vérifier la différence de contraste entre la couleur de foreground et celle de background.
Ta problémentique est un peu plus compliquée (il faut sans doute que tu fasses les comparaisons pour toutes les couleurs entres elles) mais c'est probablement un bon début.
A toi de voir si le jeu en vaut la chandelle par rapport à la liste définie en dur.
Malheureusement pas de vision algorithmique de la chose
Je pense que je vais finir par essayer de definir une table de 20 couleurs
Si l'utilisateur prends plus, je lui propose les dernieres en niveau de Gris (R=G=B)
S'il prends moins, je fais un pas de selection dans le tableau
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_niky
Messages postés168Date d'inscriptionjeudi 28 juin 2001StatutMembreDernière intervention18 octobre 20087 7 sept. 2008 à 19:27
Salut,
Une solution intéressante pour faire ça est de changer l'espace de couleur.
Une couleur peut être définie dans plusieurs espaces. Le plus connu pour les développeurs est l'espace RVB (rouge vert bleu) mais tu peux basculer par exemple en TSV (teinte saturation valeur).
Le TSV est intéressant dans sens où la teinte définie la couleur sur le cercle chromatique (la valeur de T est un angle variant de 0 à 360°). S correspond à la pureté de la couleur (1 couleur pétante, 0 gris). Quand au V, il s'agit de la luminosité de la couleur (1 = clair, 0 = sombre).
De là, tu peux facilement faire un algorithme qui va de 0 à 360 avec un pas de 360 / n où n est le nombre de couleurs à générer (quand à S et V, la valeur 1 est pas mal).
Tu garantis de cette manière que les couleurs sont les plus distantes les unes des autres.
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 7 sept. 2008 à 23:19
Salut Niky
Merci pour ta suggestion et surtout pour ton explication concernant TSV j'imagine que TSV est la traduction de HSL que j'ai vu mainte fois sans chercher a comprendre mais ton explication m'éclaire
Mais ci c'est ca il me semble que HSL en informatique on fait varier chaque element entre 0 et 255 et toi tu parle de 0 et 1 tu considere que 1 c'est 255 en logique ?
ikaer
Messages postés42Date d'inscriptionlundi 14 janvier 2008StatutMembreDernière intervention23 septembre 2008 8 sept. 2008 à 08:16
Hello,
J'ai du faire le même genre de truc pour un graphique (changement de couleur automatique à l'ajout de courbe, un peu style Excel). J'ai pas trouvé vraiment de méthode, alors je me suis fait une méthode static qui recupére la place de l'élément à colorer dans la liste, et lui associe une couleur que j'ai définit dans ma classe static. Je ne sais pas si ça correspond exactement à ce que tu veux. Pour pouvoir ajouter autant de courbes que je voulais et ne pas fixer toutes les couleurs des 100 premières courbes (-.-) j'utilise le dernier chiffre de l'index de l'élément pour associer une couleur (soit 10 couleurs).
cs_niky
Messages postés168Date d'inscriptionjeudi 28 juin 2001StatutMembreDernière intervention18 octobre 20087 8 sept. 2008 à 20:26
Je me permet de répondre sur le TSL.
Il s'agit bien de la traduction française du HSL (Hue Saturation Lightness).
Pour ce qui est de l'échelle des valeurs mettre
- T entre [0 ; 360[, provient du fait que T est un angle sur le cercle chromatique (par habitude, cette valeur est indiqué en degrés plutôt qu'en radians)... mais tu imagines bien que la nature ne se limite pas à 360 teintes différentes, donc la teinte 43,798° est admise...
- C'est là qu'on en arrive au S et L qui sont dans le même cas. La nature ne se limite pas à 256 variantes. C'est pourquoi ces valeurs sont généralement codées entre [0 ; 1] avec l'infinité de possibilités que cela offre.
Pourquoi coder tout ça sur des flottants ? Parce que si tu fais une conversion RVB -> TSL -> RVB et que tu n'utilises que des entiers, tu vas obtenir des erreurs d'arrondis conséquentes.