【问题标题】:Get color from string (hash)从字符串(哈希)中获取颜色
【发布时间】:2017-05-28 19:52:49
【问题描述】:

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

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

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

所以我需要一个SolidColorBrush 作为背景。

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

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    通过这种方法,您可以获得一个可用作背景的 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;
    

    【讨论】:

      【解决方案2】:

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

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

      "hello123" 返回#12c09349

      【讨论】:

      • 我试过了,但如果字符串相似,它的颜色相同。
      【解决方案3】:

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

      using System.Windows.Media;
      
      new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFDFD991"));
      

      【讨论】:

      • 我已经编辑了这个问题,因为输入字符串是一个随机字符串,比如 hello123 和 bye456。
      • 什么意思?你能准确地发布你想要的吗?您尝试使用的对象和值会很有帮助。
      • 我自己回答了这个问题,不明白为什么它被否决了。找不到重复项。希望,现在你明白这个问题了。
      • 你应该如何从这样的字符串中提取颜色?这没有任何意义。
      • 我认为他的意思是计算随机颜色,这对于特定字符串或多或少是唯一的,他正在寻找一种算法。尽管有可能,但必须记住,RGB 格式 (0-255, 0-255, 0-255) 最多只能允许 16581375 种唯一颜色,而字符串是不确定的。不过,我看不出有人需要这个,OP 需要用细节更新他的问题。
      猜你喜欢
      • 2013-08-28
      • 2018-09-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多