J'ai un ensemble de chaînes uniques, et je souhaite les montrer avec une couleur. Les cordes se répètent chaque fois ici et là donc j'ai besoin de la couleur pour être cohérente, pas aléatoire. Une approche serait de randomiser la couleur et l'enregistrer dans Dictionary
ou quelque chose comme ça afin que je puisse utiliser la même couleur à nouveau.Comment créer un System.Drawing.Color arbitraire sur une chaîne?
Une autre approche serait de trouver un algorithme/logique simple qui transforme en quelque sorte une chaîne en System.Drawing.Color
. Cependant, je voudrais le garder à un ensemble de couleurs prédéfinies, de sorte que je ne finis pas avec des couleurs pas si bonnes. Appelons cela List<Color> allowedColors
.
J'ai essayé Convert.ToByte()
et j'ai pensé que j'utiliserais l'octet pour les composants R, G et B de Color
, mais cela n'a pas fonctionné parce que la conversion ne fonctionne pas de cette façon. Une chaîne est juste une simple chaîne String foo = "bar";
. La relation entre la couleur et la chaîne n'a pas d'importance tant qu'elle est cohérente, c'est-à-dire que chaque fois que le programme est exécuté, il doit être égal à la même couleur et les couleurs doivent généralement être différentes pour chaque chaîne. couleurs car il y a plus de chaînes que de couleurs et ce n'est pas un mapping one-to-one).
Ces chaînes proviennent d'une source que je ne contrôle pas. Ils sont uniques, mais varient. Chaque fois que le programme est démarré et si la même chaîne apparaît, elle doit être de la même couleur. Donc, je pense que je suis à la recherche d'une sorte de transformation de chaîne à octet qui, lorsqu'elle chevauche la plage d'octets, finit par être mappée sur RGB et envoyée à Color.FromArgb()
.
Quel type de cordes? –
Pourriez-vous au moins donner un exemple du type de chaîne dont vous parlez? Quelle est la relation attendue entre la chaîne et la couleur résultante? –
La classe StringConverter fait du bon travail en gérant différents formats de chaînes et en reconnaissant les couleurs nommées. Ne le rends pas trop arbitraire. –