给定一个颜色对象列表,找到最常/最不常用的颜色,并将其作为颜色对象返回



目前我有一个Color对象的列表。每个格式都是RGB格式,这意味着,例如,0, 0, 0将是黑色。

我有兴趣循环浏览此列表并对其进行直方图。找出最常出现的颜色和最常出现的颜色。我的一个问题是如何对颜色值进行装箱?给定一个双精度列表,您可以通过查找其范围来对值进行装箱,然后将其除以所需的箱数。不确定如何通过Color对象实现这一目标。

我目前有一段代码使用 LINQ:

            var cs = new List<Color> { 
                Color.White, 
                Color.Black 
            };
            var max = cs.OrderByDescending(x => (0.2125 * x.R) + (0.7154 * x.G) + (0.0721 * x.B)).Last();

它采用我的颜色列表,并找到该列表的"max"值,并输出 WhiteBlack ,具体取决于输出是最大值还是最小值。

总而言之,我对颜色列表的.Mode()方法感兴趣。

对于计算模式,请尝试ToLookup排序:

var ordered = cs.ToLookup(c => c).OrderByDescending(c => c.Count()).First().Key;

更新:

您也可以创建扩展方法:

public static Color Mode(this IEnumerable<Color> colors)
{
     return colors.ToLookup(c => c).OrderByDescending(c => c.Count()).First().Key;
}

最新更新