我有以下代码:
for (int iy = y; iy < y + 4; iy++)
for (int ix = x; ix < x + 4; ix++)
{
Color c = default_image.GetPixel(ix,iy);
}
}
现在我需要确定这16种颜色中哪种颜色是最常用的颜色。我怎么能这样做?
答案 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");