如何确定16个不同像素中最常用的颜色?

时间:2015-03-11 20:26:36

标签: c# colors compare equals

我有以下代码:

for (int iy = y; iy < y + 4; iy++)
    for (int ix = x; ix < x + 4; ix++)
     {
         Color c = default_image.GetPixel(ix,iy);
     }
 }

现在我需要确定这16种颜色中哪种颜色是最常用的颜色。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

首先将Colors放入集合中,例如数组。然后,您可以使用LINQ GroupBy对它们进行分组,然后根据计数按降序顺序对组进行排序。得到第一组颜色最多的组:

Color[] colors = new [] { color1, color2, color3, ... };
var mostUsedColor = colors.GroupBy(c => c)
                          .OrderByDescending(g => g.Count())
                          .First().Key;

答案 1 :(得分:0)

这是一个完整的解决方案:

首先,它在字典集合中收集颜色及其计数。

为此,它在Bitmap的尺寸上使用双循环

然后命令他们下降到第二个集合。

最后它显示了MessageBox中的第一个最大计数:

  Dictionary<Color, int> colors = new Dictionary<Color, int>();

  for (int iy = y; iy < y + 4; iy++)
    for (int ix = x; ix < x + 4; ix++)
     {
        Color c = default_image.GetPixel(ix,iy);
        if (colors.ContainsKey(c)) colors[c]++; else colors.Add(c, 1);
     }
    var vvv = colors.OrderByDescending(el => el.Value);
    MessageBox.Show(String.Format("Color {0} found {1} times.", 
                    vvv.First().Key, vvv.First().Value),  "Result");