#java #android
#java #Android
Вопрос:
Как я могу преобразовать доминирующий цвет в имя цвета?
Этот метод заключается в поиске доминирующего цвета из изображения.
private void extractProminentColors(Bitmap bitmap){
int defaultColor = 0x000000;
Palette p = Palette.from(bitmap).generate();
int VibrantColor = p.getVibrantColor(defaultColor);
v1 = String.format("#%X", VibrantColor);
colorv1 = v1;
checkBox1.setBackgroundColor(VibrantColor);
int MutedColorLight = p.getLightMutedColor(defaultColor);
v2 = String.format("#%X", MutedColorLight);
colorv2 = v2;
checkBox2.setBackgroundColor(MutedColorLight);
int MutedColorDark = p.getDarkMutedColor(defaultColor);
v3 = String.format("#%X", MutedColorDark);
colorv3 = v3;
checkBox3.setBackgroundColor(MutedColorDark);
}
и это ArrayList имени цвета
final ArrayList<ColorName> colorList = new ArrayList<ColorName>();
colorList.add(new ColorName("Black", 0x00, 0x00, 0x00));
colorList.add(new ColorName("White", 0xff, 0xff, 0xff));
colorList.add(new ColorName("Gray", 0x80, 0x80, 0x80));
colorList.add(new ColorName("Navy" , 0x00, 0x00, 0x80));
colorList.add(new ColorName("Red", 0xff, 0x00, 0x00));
colorList.add(new ColorName("Orange", 0xff, 0x80, 0x00));
colorList.add(new ColorName("Yellow", 0xff, 0xff, 0x00));
colorList.add(new ColorName("Green", 0x00, 0xff, 0x00));
colorList.add(new ColorName("Blue", 0x00, 0x00, 0xff));
Ответ №1:
Поскольку доминирующие цвета на изображении, скорее всего, не совсем соответствуют перечисленным именованным цветам, вы можете найти только ближайший именованный цвет.
Напишите distance()
метод, который вычисляет, насколько сильно отличаются два цвета, и colorNames
найдите в списке запись, где расстояние до доминирующего цвета минимально.
Комментарии:
1. Некоторые догадки о том, чего на самом деле хочет OP, но правдоподобны. В противном случае, что я сделал.
Ответ №2:
Если вы ищете инструмент командной строки, который делает именно это: Cict
Пример:
$ ./cict 000081
1 #000080 navyblue
Как вы можете видеть, вы просто передаете 24-битное шестнадцатеричное значение в cict, и оно сообщает расстояние до найденного цвета (в данном случае 1), значение фактического цвета (#000080) и имя (navyblue).
(Я автор Cict)