使用什么算法将一个字母转换为颜色Gmail-style?

What algorithm to use to convert one letter to color Gmail-style?

在某些电子邮件应用程序中,列表项显示为'cards',每个列表项都有一个大圆形图标,带有header 文本的第一个字母。转换是稳定的——每个字母每次都转换成相同的颜色(颜色和字母的数量可能不匹配)。我想,它可能会大大改善视觉和导航。

我可以将每个字母的颜色值硬编码到某种字典中。但我想根据字母代码获得颜色(类似于 Google 的颜色)以避免硬编码。

所以,问题是 - 使用什么算法从字母中获取 Gmail-like 颜色。

任何编程语言都可以作为解决方案,但 C# 更可取。

如果算法能涵盖任何字符,不仅是拉丁字母符号,还可能是西里尔字符和一些特殊字符(如@、#、$、% 等),那就太好了

附上我自己帐户中的样本。

这是一个非常简单的算法,请注意您应该根据自己的需要对其进行调整:

首先,我将获取一个字符,从中获取 ASCII 码。 然后我会通过在前面添加零来确保它是 3 个数字。 然后将该值及其前后的值用作RGB颜色。

代码如下:

Console.Write("Please enter a given character: ");
var characterCode = Convert.ToInt32(Console.ReadKey().KeyChar).ToString();

Console.WriteLine("");

// Convert integer 182 as a hex in a string variable
string characterRColor = characterCode.PadLeft(3, '0');
string characterGColor = (Convert.ToInt32(characterCode) - 1).ToString().PadLeft(3, '0');
string characterBColor = (Convert.ToInt32(characterCode) + 1).ToString().PadLeft(3, '0');

Console.WriteLine("R Color: " + characterRColor);
Console.WriteLine("G Color: " + characterGColor);
Console.WriteLine("B Color: " + characterBColor);
Console.ReadLine();
    public static Color ToColorFromTitleCaseLetters(this string fullName)
    {
        if (fullName.IsNullOrEmpty()) return Color.Blue;

        try
        {
            string result = string.Concat(Regex
                .Matches(fullName, "[A-Z]")
                .OfType<Match>()
                .Select(match => match.Value));

            int hash = 1;
            if (result.Length > 1)
            {
                hash = (Convert.ToInt32(result[0]) - 64) * 100 + Convert.ToInt32(result[1]) - 64; 


                //
                string[] colors = new[]
                {
                    "008000", "0000FF", "800080", "800080", "FF00FF", "008080", "FFFF00", "808080", "00FFFF",
                    "000080",
                    "800000", "FF3939", "7F7F00", "C0C0C0", "FF6347", "FFE4B5", "33023", "B8860B", "C04000",
                    "6B8E23", "CD853F", "C0C000", "228B22", "D2691E", "808000", "20B2AA", "F4A460", "00C000",
                    "8FBC8B", "B22222", "843A05", "C00000"
                };

                int max = (('Z' - 64) * 100 + 'Z' - 64);

                decimal index = ((decimal) hash / (decimal) max) * colors.Length;
                return Color.FromHex(colors[(int) index]);
            }
        }
        catch
        {
        }

        return Color.Blue;
    }