Преобразование доминирующего цвета монастыря в имя цвета

#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)