2011-12-22 4 views
-1

У меня есть массив цветов:Сортировка массива цветов по палитре

private static string[] Colors = new string[] { 
    "#A2AD00", "#69963B", "#00B2C0", "#009697", "#A31A7E", 
    "#7D0063", "#EEAF00", "#EC7A00", "#0097D4", "#006FB4" 
}; 

Как я могу сортировать цвета по палитре?

Извините за запутанный вопрос. Я хочу упорядочить эти элементы по группам цветов (зелень - зелень, красный - красный). Внутри каждой группы элементы должны быть расположены по яркости цвета.

(Link to color groups representation)

+4

Дайте ожидаемый отсортированный список – sll

+1

Как @sll сказал, что нет никакого способа, этот вопрос может быть решен конструктивно, не зная, вы должны рассмотреть красные «больше, чем» блюз и так далее. – Yuck

+1

Получите R, G, B и группу по высоте. Это примерно соответствует основному цвету. Для яркости выполните сортировку по шкале серого (0.299 * R + 0.587 * G + 0.114 * B). –

ответ

1

У вас есть массив строк, а не цвета. Хотя эти строки могут быть преобразованы в цветные объекты, вы не можете получить палитру.

Палитра используется в индексированном растровом изображении, так что индекс n указывает на определенный цвет; А не наоборот. Нет другого способа преобразования, если вы также не знаете индексированный растровый рисунок, из которого были сделаны цвета.

Другими словами, для вашего вопроса; «Сортировка по палитре», чтобы иметь какой-то смысл, вам, по крайней мере, нужно будет знать объект ColorPalette, из которого были сделаны цвета. Я предполагаю, что вы хотите сортировать по индексу в палитре? В этом случае вы можете искать цвета в массиве Записи, чтобы получить их индекс; затем сортировать по этому индексу.

4

Вы можете попробовать использовать список цветов вместо строкового массива. Следующая сортировка сортирует цвета радуги.

List<Color> myColors = new List<Color>(); 

добавить цвета в список

myColors.Add (new Color (r,g,b)) 

colors.Sort(delegate(System.Drawing.Color left, System.Drawing.Color right) 
{ 
    return left.GetBrightness().CompareTo(right.GetBrightness()); 
}); 
0

, что о

Array.Sort(Colors); 
    foreach (string s in Colors) 
    { 
     Console.WriteLine(s); 
    } 
Смежные вопросы