代码之家  ›  专栏  ›  技术社区  ›  Jamie Poole

按十六进制值排序颜色

  •  1
  • Jamie Poole  · 技术社区  · 10 年前

    我不知道如何对这个问题进行分类,也不知道如何有效地解释,但我会尽我所能。

    我从我的应用程序中收集了一系列随机的十六进制代码值。

    我想以渐变的方式呈现这些颜色,这(理论上)将显示一组颜色的突出程度。

    如中所示,如果在我的随机颜色数组中有更多的蓝色阴影,那么将其放入该渐变将反映出这一点。

    但首先,我需要将渐变中的颜色“排序”为类似的颜色。

    我正在使用C#,但更多的是在了解了如何将Hex颜色值映射/排序/分组的理论之后。

    2 回复  |  直到 10 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    感谢您的评论,我使用了Hue方法作为注释,结果如下所示——这很好,正如您可以看到的,我的颜色列表(动态设置)中有更多蓝色,再次感谢。

    但它仍然有一个缺陷——出于某种原因,它在重复,而不是占据整个高度:(从蓝色到红色,应该只有1个线性)

    (我将就此提出另一个问题)。

    LinearGradientBrush

    我的代码如下(ColorFromString是我编写的一个方法 this question ):

    private Color[] OrderColorByHue(List<string> colors)
    {
      foreach(string c in colors)
      {
        Color color = ColorFromString(c); // This was defined in another question of mine :)
        float hue = color.GetHue();
    
        hueColors.Add(new KeyValuePair<Color, float>(color, hue));
      }
    
      hueColors.Sort((color1, color2) => color2.Value.CompareTo(color1.Value));
      Color[] value = hueColors.Select(color => color.Key).ToArray();
    
      return value;
    }
    

    希望这能帮助其他人:)

        2
  •  0
  •   Emre    8 年前
        // GET: Admin/Colors
        public ActionResult Index()
        {
            var colors = db.Colors.OrderBy(a => a.HexCode);
            return View(colors);
        }
    

    我在MVC中使用了它。网络项目。 我想你可以自己修改一下。

    HexCodes必须以“#”开头(对于订购很重要)