Часто используемый цвет на изображении - C#
Формулировка задачи:
Есть изображение, нужно найти самый часто используемый цвет.
Через GetPixel получил массив цветов.
Так понимаю, нужно получить количество одинаковых элементов в массиве,и вернуть тот, у которого максимально кол-во повторов. Исключить белы и черный при этом.
Буду признателен за LINQ сортировку которая найдет элемент в массиве имеющий максимальное количество повторов.
public int GetTopColor(Bitmap sourceBitmap)
{
ArrayList colors = new ArrayList();
for (int i = 0; i < sourceBitmap.Width; i++)
{
for (int j = 0; j < sourceBitmap.Height; j++)
{
Color pixelColor = sourceBitmap.GetPixel(i, j);
if (pixelColor.R != 0 && pixelColor.R != 255 )
{
colors.Add(pixelColor.R);
}
}
}
//тут LINQ для colors
}
ArrayList не принципиален, можно и List тогда можно будет сделать так
var c = colors.GroupBy(i => i);
осталось вывести x.Key имеющий максимальное значение x.Value
буду признателен за любое решение.
Решение задачи: «Часто используемый цвет на изображении»
textual
Листинг программы
return colors.Where(pair => pair.Key.Green != 0 && pair.Key.Green != 255).Aggregate((l, r) => l.Value > r.Value ? l : r).Key;