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

时间:2014-01-10 14:55:52

标签: c# linq graphics colors bitmap

目前我有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,具体取决于输出是max还是min。

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

1 个答案:

答案 0 :(得分:0)

对于计算模式,请尝试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;
}