Вопрос по java, colors – Преобразование значений RGBA в шестнадцатеричный цветовой код

5

В моем приложении есть несколько ползунков, которые позволяют пользователю изменять цвета ARGB, однако мне необходимо преобразовать эти значения в шестнадцатеричное значение, например 0xff000000, которое является сплошным черным.

Это то, что я до сих пор:

protected int toHex(Color col) {
    String as = pad(Integer.toHexString(col.getAlpha()));
    String rs = pad(Integer.toHexString(col.getRed()));
    String gs = pad(Integer.toHexString(col.getGreen()));
    String bs = pad(Integer.toHexString(col.getBlue()));
    String hex = "0x" + as + rs + gs + bs;
    return Integer.parseInt(hex, 16);
}

private static final String pad(String s) {
    return (s.length() == 1) ? "0" + s : s;
}

Однако после получения значения Integer, как показано ниже, я получаю исключение NumberFormatException для входной строки: & quot; 0xccffffff & quot ;:

int color = toHex(new Color(153f, 153f, 153f, 0.80f));

Любые идеи о том, как получить это целое число? Благодарю.

Ваш Ответ

2   ответа
4

ильный цвет:

int color = toHex(new Color(1f, 1f, 1f, 1f));

Который белый.

Ах, спасибо. Разобрался сейчас. Я использую Slick для своих шрифтов, и теперь я переключил цвет на java.awt.Color. Kaikz
0

Итак, ваш максимальный цветовой код#FFFFFFFF (8 цифр).

МетодInteger.parseInt позволит вам разобрать значение из-0x80000000 в0x7FFFFFFF, Для того, чтобы получить вашу ценность0xCC999999 Исходя из этого, вам придется отрицать значение и ввод-0x33666667 - что, конечно, не полезно вообще.

Неуклюжий, но стабильный обходной путь используетLong.

(int) Long.parseLong(text, 16)

Похожие вопросы