Java - преобразование шестнадцатеричного цвета в десятичный - PullRequest
2 голосов
/ 15 июня 2019

Я хочу преобразовать шестнадцатеричный цвет (например, # FF0000) в десятичный цвет (например, 16711680).Как мне это сделать?

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

Color hexcolor = Color.decode("#FF0000");
//And then?

Ответы [ 2 ]

3 голосов
/ 15 июня 2019

Один из способов проверки ввода может быть:

public static int parseHex(final String color) {
    final Matcher mx = Pattern.compile("^#([0-9a-z]{6})$", CASE_INSENSITIVE).matcher(color);
    if(!mx.find())
        throw new IllegalArgumentException("invalid color value");
    return Integer.parseInt(mx.group(1), 16);
}

Хотя это и не требуется, вы можете разобрать каждый компонент цвета отдельно:

public static int parseColor(final String color) {
    final Matcher mx = Pattern.compile("^#([0-9a-z]{2})([0-9a-z]{2})([0-9a-z]{2})$", CASE_INSENSITIVE).matcher(color);
    if(!mx.find())
        throw new IllegalArgumentException("invalid color value");
    final int R = Integer.parseInt(mx.group(1), 16);
    final int G = Integer.parseInt(mx.group(2), 16);
    final int B = Integer.parseInt(mx.group(3), 16);
    return (R << 16) + (G << 8) + B;
}

Если зависимость от Color не является проблемой, вы можете использовать:

public static int parseColor(final String color) {
    final Color c = Color.decode(color);
    return (c.getRed() << 16) + (c.getGreen() << 8) + c.getBlue();
}

С другой стороны, вы тоже можете сделать:

public static int parseColor(final String color) {
    return 0xFFFFFF & (Color.decode(color).getRGB() >> 8);
}

Но поскольку требуется знать внутреннее представление, это не рекомендуется.

1 голос
/ 15 июня 2019

Я уже нашел ответ из-за комментария vlumi.

https://www.javatpoint.com/java-hex-to-decimal

public static int convertHEXtoDecimal(String HEX) {
    String hex = HEX.replaceAll("#", "");
    String digits = "0123456789ABCDEF";
    hex = hex.toUpperCase();
    int val = 0;
    for (int i = 0; i < hex.length(); i++) {
        char c = hex.charAt(i);
        int d = digits.indexOf(c);
        val = 16 * val + d;
    }
    return val;
}
...