2017-01-13 23 views
-3

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

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

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

所以我需要得到一个SolidColorBrush的背景。

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

回答

-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; 
0

您可以设置控件的背景下使用的SolidColorBrush这样的:

using System.Windows.Media; 

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

我已经编辑了问题,因为输入字符串就像是hello123和bye456一个随机字符串。 – Suplanus

+0

你是什么意思?你能准确地发布你想要的东西吗?您尝试使用的对象和值将会很有帮助。 –

+0

我自己回答了这个问题,不明白为什么它被选中。发现没有重复。希望,现在你明白了这个问题。 – Suplanus

0

可以这样做来获得您的颜色代码

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

"hello123"返回#12c09349

+0

我试过了,但是如果字符串是相似的,它的颜色是一样的。 – Suplanus