Как отсортировать ArrayList цветов HSV - PullRequest
0 голосов
/ 21 сентября 2018

Я делаю приложение для запуска Android, которое извлекает средний цвет каждого значка приложения.

Идея состоит в том, чтобы сортировать приложения по цвету в HSV и получать красивый градиент из приложений.

Сначала я извлекаю среднюю RGB.Затем я конвертирую rgb в HSV и сравниваю их друг с другом по шкале HUE (от 0 до 360).

Проблема в том, что порядок цветов не является визуально приятным.Я думаю, это потому, что сортировка работает только по измерению HUE.Я имею в виду, что сортировка работает нормально, но может быть "красной", которая имеет полную яркость, и поэтому для нас это "белая".

Я пробовал сортировать по HUE, затем по насыщенности и по значению.Тот же результат.Упорядоченный список цветов приложения, который кажется неупорядоченным для глаз.

Позже я кодирую множество операторов if в методе сравнения, исключая приложения, у которых его насыщенность / яркость больше или меньше, чем ... и т.д.

Теперь я получаю что-то лучше, но пока не совсем:

Цвет градиента приложения Launcher 1

(средний цвет значка приложения представлен в цвете фона)

Затем я добавлю еще несколько операторов if.Но возникает та же проблема:

TOP приложений (Fine)

BOTTOM Apps (Disaster) Это приложения, которые исключают операторы ifs изатем сортируются в другом списке.Наконец, я использую .addAll (), чтобы добавить список приложений «бедствия» внизу.

Я хочу сделать что-то вроде этого:

Изображение

Я нашел этот вопрос (выше изображение оттуда), но я не знаю, является ли это полезным для моего конкретного случая Как отсортировать цвета в двух измерениях?

Я пытался посмотреть иреализовывать такие методы, как евклидово расстояние, задачи коммивояжера и kdtree ... но я не знаю, является ли это правильным способом, и я не знаю, как я могу использовать это для сортировки списка цветов.Я также пытался искать библиотеки Java для сортировки цветов, но я не нашел ни одной.

Большое спасибо за потраченное время.

...