Я ищу способ сортировки списка шестнадцатеричных цветов от темного к светлому / от светлого к темному, т.е. все оттенки красного цвета должны быть отсортированы как темно-красный, от светло-красного до розового. Там также могут быть оттенки других цветов. Сначала я хочу показать отсортированные оттенки красного, затем отсортированные оттенки других цветов в любом порядке, т.е. отсортированный красный, отсортированный синий, отсортированный зеленый и т. Д. c.
Сначала я преобразовал RGB в HSB / HSL, а затем отсортировал его. ссылаясь на сообщения ( Sort Hex Color Values , Сортировка списка цветов по HSV / HSB )
Я реализовал тестовую версию basi c в Java используя код ниже
public class classA {
public static Color hex2Rgb(String colorStr) {
return new Color(
Integer.valueOf( colorStr.substring( 1, 3 ), 16 ),
Integer.valueOf( colorStr.substring( 3, 5 ), 16 ),
Integer.valueOf( colorStr.substring( 5, 7 ), 16 ) );
}
public static void main(String[] args) {
String hex = "#FFFFFF";
ArrayList<String> colors = new ArrayList<>();
colors.add("#FFA07A");
colors.add("#FA8072");
colors.add("#E9967A");
colors.add("#F08080");
colors.add("#CD5C5C");
colors.add("#DC143C");
colors.add("#B22222");
colors.add("#FF0000");
colors.add("#8B0000");
colors.add("#800000");
colors.add("#FF6347");
colors.add("#FF4500");
colors.add("#DB7093");
ArrayList<Color> colorArrayList = new ArrayList<>();
for (String s : colors) {
Color colorcode = hex2Rgb(s);
colorArrayList.add(colorcode);
}
Collections.sort(colorArrayList, new Comparator<Color>() {
@Override
public int compare(Color c1, Color c2) {
float[] hsb1 = Color.RGBtoHSB(c1.getRed(), c1.getGreen(), c1.getBlue(), null);
float[] hsb2 = Color.RGBtoHSB(c2.getRed(), c2.getGreen(), c2.getBlue(), null);
if (hsb1[0] < hsb2[0])
return -1;
if (hsb1[0] > hsb2[0])
return 1;
if (hsb1[1] < hsb2[1])
return -1;
if (hsb1[1] > hsb2[1])
return 1;
if (hsb1[2] < hsb2[2])
return -1;
if (hsb1[2] > hsb2[2])
return 1;
return 0;
}
});
ArrayList<String> res = new ArrayList<>();
for(Color c: colorArrayList){
String hexc = String.format("#%02x%02x%02x", c.getRed(), c.getGreen(), c.getBlue());
res.add(hexc);
}
for(String s: res){
System.out.println(s);
}
}
Это не работает для моего варианта использования. Буду признателен за любую помощь.
PS: лучше было бы без использования библиотек AWT.