2015-03-11 2 views
-3

У меня есть следующий код:Как определить наиболее часто используемый цвет среди 16 разных пикселей?

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

Держите это просто, кстати, я новичок в этом – JonasAnon

+7

Мы бы не догадались. Начните с изучения циклов, затем о коллекций. A Dictionay поможет .. – TaW

ответ

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"); 
+0

спасибо, но он только должен проверить 16 пикселей, мы также можем исправить это – JonasAnon

+0

Если они всегда находятся в верхнем левом углу, просто дайте петлям идти: 'y <4' и' x <4' .. – TaW

+0

нет, x и y были прочитаны ранее, как позиция, из которой она должна быть прочитана – JonasAnon

1

Сначала положить Colors в коллекции, такие как array.Then вы можете использовать LINQ GroupBy сгруппировать их, сортировать группы в убыванию порядок, основанный на подсчете затем получить первую группу, которая имеет наибольшее количество цветов в нем:

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

simple! = Short ;-) – TaW

+0

первый x из GroupBy (x => x) подчеркивается красным цветом, как исправить – JonasAnon

+0

Возможно, потому, что вы уже используете 'x'. замените его на 'el => el.Count' или примерно на что угодно. Это просто временное имя .. – TaW

Смежные вопросы