从字符串中获取颜色(哈希)

时间:2017-01-13 12:27:08

标签: c# wpf

如何计算随机颜色,这对于特定字符串或多或少是唯一的? 确实,RGB格式(0-255,0-255,0-255)只允许最多16581375个独特颜色,而字符串是不确定的。

字符串可以是随机的,例如hello123bye456

我的目标是通过标题文本显示几乎唯一颜色的控件(扩展器)。 因为在GUI的其他列表中有一个对该扩展器的引用,所以我想帮助用户更快地找到该条目。

所以我需要获得SolidColorBrush作为背景。

实施例: 一个扩展器的标头为hello123,以下扩展器标头为bye456。所以我想将每个标题的背景设置为(几乎)唯一的颜色。

3 个答案:

答案 0 :(得分:0)

您可以设置使用SolidColorBrush的控件的背景,如下所示:

using System.Windows.Media;

new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFDFD991"));

答案 1 :(得分:0)

可以做这样的事情来获取你的颜色代码

"#" + Convert.ToString("hello123".GetHashCode(), 16)

"hello123"返回#12c09349

答案 2 :(得分:-3)

使用此方法,您将获得一个可用作背景的SolidColorBrush:

private static SolidColorBrush GetSolidColorBrushFromString(string value)
{
   // Get Color from string
   var md5 = MD5.Create();
   var hash = md5.ComputeHash(Encoding.UTF8.GetBytes(value));
   var color = Color.FromRgb(hash[0], hash[1], hash[2]);
   var brush = new SolidColorBrush(color);
   brush.Opacity = 0.2; // Readability in UI
   return brush;
}

用法:

var brushBackground = GetSolidColorBrushFromString(expander.Name);
expander.Background = brushBackground;