目前我有一个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"值,并输出 White
或 Black
,具体取决于输出是最大值还是最小值。
总而言之,我对颜色列表的.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;
}