Для тех, кто хочет 3-символьную версию, обратите внимание, что в 3-символьном регистре каждое значение должно быть * 255/16. Я тестировал это с помощью «000», «aaa» и «fff», и теперь все они работают правильно. .
Эндрю
283
На самом деле, есть более простой (встроенный) способ сделать это:
Color.parseColor не поддерживает цвета с тремя цифрами вроде этой: #fff
neoexpert
Вы можете попробовать ниже #fff int red = colorString.charAt (1) == '0'? 0: 255; int blue = colorString.charAt (2) == '0'? 0: 255; int зеленый = colorString.charAt (3) == '0'? 0: 255; Color.rgb (красный, зеленый, синий);
GTID
9
Вот версия, которая поддерживает версии RGB и RGBA:
/**
* Converts a hex string to a color. If it can't be converted null is returned.
* @param hex (i.e. #CCCCCCFF or CCCCCC)
* @return Color
*/publicstaticColorHexToColor(String hex){
hex = hex.replace("#","");switch(hex.length()){case6:returnnewColor(Integer.valueOf(hex.substring(0,2),16),Integer.valueOf(hex.substring(2,4),16),Integer.valueOf(hex.substring(4,6),16));case8:returnnewColor(Integer.valueOf(hex.substring(0,2),16),Integer.valueOf(hex.substring(2,4),16),Integer.valueOf(hex.substring(4,6),16),Integer.valueOf(hex.substring(6,8),16));}returnnull;}
publicstaticint[] getRGB(finalString rgb){finalint[] ret =newint[3];for(int i =0; i <3; i++){
ret[i]=Integer.parseInt(rgb.substring(i *2, i *2+2),16);}return ret;}
Преобразуйте его в целое число, затем дважды измените его на 16, 256, 4096 или 65536 в зависимости от длины исходной шестнадцатеричной строки (3, 6, 9 или 12 соответственно).
Чтобы уточнить ответ, предоставленный @xhh, вы можете добавить красный, зеленый и синий, чтобы отформатировать вашу строку как «rgb (0,0,0)» перед ее возвратом.
For shortened hex code like #fff or #000int red ="colorString".charAt(1)=='0'?0:"colorString".charAt(1)=='f'?255:228;int green ="colorString".charAt(2)=='0'?0:"colorString".charAt(2)=='f'?255:228;int blue ="colorString".charAt(3)=='0'?0:"colorString".charAt(3)=='f'?255:228;Color.rgb(red, green,blue);
Ответы:
Я думаю, это должно сработать:
источник
На самом деле, есть более простой (встроенный) способ сделать это:
источник
источник
Для разработки под Android я использую:
источник
Вот версия, которая поддерживает версии RGB и RGBA:
источник
Шестнадцатеричный код цвета: #RRGGBB.
RR, GG, BB - шестнадцатеричные значения от 0 до 255.
Назовем RR XY, где X и Y - шестнадцатеричные символы 0-9A-F, A = 10, F = 15
Десятичное значение: X * 16 + Y.
Если RR = B7, десятичное число для B равно 11, поэтому значение равно 11 * 16 + 7 = 183.
источник
вы можете сделать это просто, как показано ниже:
Например
источник
Для JavaFX
.
источник
Преобразуйте его в целое число, затем дважды измените его на 16, 256, 4096 или 65536 в зависимости от длины исходной шестнадцатеричной строки (3, 6, 9 или 12 соответственно).
источник
Многие из этих решений работают, но это альтернатива.
Если вы не добавите 4278190080 (# FF000000), альфа цвета будет равна 0, и он не будет отображаться.
источник
Чтобы уточнить ответ, предоставленный @xhh, вы можете добавить красный, зеленый и синий, чтобы отформатировать вашу строку как «rgb (0,0,0)» перед ее возвратом.
источник
Если вы не хотите использовать AWT Color.decode, просто скопируйте содержимое метода:
Integer.decode обрабатывает # или 0x, в зависимости от того, как отформатирована ваша строка
источник
Вот еще одна более быстрая версия, которая обрабатывает версии RGBA:
источник
Самый простой способ:
источник
Шестнадцатеричные коды цветов уже являются rgb. Формат: #RRGGBB.
источник
На днях я решил аналогичную проблему и нашел удобным преобразовать шестнадцатеричную цветовую строку в int array [alpha, r, g, b]:
источник
источник