Я делаю приложение для запуска Android, которое извлекает средний цвет каждого значка приложения.
Идея состоит в том, чтобы сортировать приложения по цвету в HSV и получать красивый градиент из приложений.
Сначала я извлекаю среднюю RGB.Затем я конвертирую rgb в HSV и сравниваю их друг с другом по шкале HUE (от 0 до 360).
Проблема в том, что порядок цветов не является визуально приятным.Я думаю, это потому, что сортировка работает только по измерению HUE.Я имею в виду, что сортировка работает нормально, но может быть "красной", которая имеет полную яркость, и поэтому для нас это "белая".
Я пробовал сортировать по HUE, затем по насыщенности и по значению.Тот же результат.Упорядоченный список цветов приложения, который кажется неупорядоченным для глаз.
Позже я кодирую множество операторов if в методе сравнения, исключая приложения, у которых его насыщенность / яркость больше или меньше, чем ... и т.д.
Теперь я получаю что-то лучше, но пока не совсем:
Цвет градиента приложения Launcher 1
(средний цвет значка приложения представлен в цвете фона)
Затем я добавлю еще несколько операторов if.Но возникает та же проблема:
TOP приложений (Fine)
BOTTOM Apps (Disaster) Это приложения, которые исключают операторы ifs изатем сортируются в другом списке.Наконец, я использую .addAll (), чтобы добавить список приложений «бедствия» внизу.
Я хочу сделать что-то вроде этого:
Изображение
Я нашел этот вопрос (выше изображение оттуда), но я не знаю, является ли это полезным для моего конкретного случая Как отсортировать цвета в двух измерениях?
Я пытался посмотреть иреализовывать такие методы, как евклидово расстояние, задачи коммивояжера и kdtree ... но я не знаю, является ли это правильным способом, и я не знаю, как я могу использовать это для сортировки списка цветов.Я также пытался искать библиотеки Java для сортировки цветов, но я не нашел ни одной.
Большое спасибо за потраченное время.