c# - 给定一个颜色对象列表,找到出现频率最高/最少的颜色,并将其作为颜色对象返回

标签 c# linq graphics colors bitmap

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

我有兴趣遍历此列表并对其进行直方图排序。找出最常出现的颜色和出现频率最低的颜色。我有一个问题是如何对颜色值进行分类?给定一个 double 列表,您可以通过找到其范围来对值进行分箱,然后将其除以您想要的分箱数。不确定如何通过 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();

它获取我的颜色列表,找到该列表的“最大”值,并根据输出是最大还是输出 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;
}

关于c# - 给定一个颜色对象列表,找到出现频率最高/最少的颜色,并将其作为颜色对象返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21047404/

相关文章:

c# - 该进程无法访问该文件,因为它正被另一个进程 asp.net c# 使用?

c# - 在 C# 中使用 Datagrid 更新数据库

linq - 根据其列属性值获取属性值

c# - 使用 LINQ 查找两个数据对象之间的差异

Java Paint 组件不工作

c# - C# 在图像上绘制字符串时如何根据图像大小调整文本大小

c# - 调用Invoke挂起程序

c# - 在 Visual Studio 2010 中突出显示转到

c# - Linq 查询返回 true 或 false

graphics - BPMN 的图形库?