2012-05-05 5 views
5

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

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

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 для входной строки: "0xccffffff":

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

Любые идеи о как получить это в Integer? Благодарю.

ответ

4

Параметры цвета должны быть поплавками между 1f и 0f. Так что это допустимый цвет:

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

Что является белым.

+0

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

0

Проблема в том, что вы включаете значения альфа. Таким образом, ваш максимальный цветовой код: #FFFFFFFF (8 цифр).

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

Неудобное, но стабильное обходное решение использует Long.

(int) Long.parseLong(text, 16)