¿Puede dar un ejemplo de lo que está tratando de convertir y a lo que está tratando de convertir? No está claro exactamente qué estás tratando de hacer.
Para aquellos que también quieren una versión de 3 caracteres, tenga en cuenta que en el caso de 3 caracteres cada valor debe ser * 255 / 16. Probé esto con "000", "aaa" y "fff", y ahora todos funcionan correctamente. .
Andrew
283
En realidad, hay una forma más fácil (integrada) de hacer esto:
Color.parseColor no admite colores con tres dígitos como este: #fff
neoexpert
¿Puedes probar debajo de #fff int red = colorString.charAt (1) == '0'? 0: 255; int blue = colorString.charAt (2) == '0'? 0: 255; int green = colorString.charAt (3) == '0'? 0: 255; Color.rgb (rojo, verde, azul);
GTID
9
Aquí hay una versión que maneja las versiones RGB y 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;}
Conviértalo en un número entero, luego divmodlo dos veces por 16, 256, 4096 o 65536 dependiendo de la longitud de la cadena hexadecimal original (3, 6, 9 o 12 respectivamente).
Para desarrollar la respuesta que @xhh proporcionó, puede agregar el rojo, el verde y el azul para formatear su cadena como "rgb (0,0,0)" antes de devolverla.
El otro día estuve resolviendo un problema similar y encontré conveniente convertir una cadena de color hexadecimal en una matriz int [alpha, r, g, b]:
/**
* Hex color string to int[] array converter
*
* @param hexARGB should be color hex string: #AARRGGBB or #RRGGBB
* @return int[] array: [alpha, r, g, b]
* @throws IllegalArgumentException
*/publicstaticint[] hexStringToARGB(String hexARGB)throwsIllegalArgumentException{if(!hexARGB.startsWith("#")||!(hexARGB.length()==7|| hexARGB.length()==9)){thrownewIllegalArgumentException("Hex color string is incorrect!");}int[] intARGB =newint[4];if(hexARGB.length()==9){
intARGB[0]=Integer.valueOf(hexARGB.substring(1,3),16);// alpha
intARGB[1]=Integer.valueOf(hexARGB.substring(3,5),16);// red
intARGB[2]=Integer.valueOf(hexARGB.substring(5,7),16);// green
intARGB[3]=Integer.valueOf(hexARGB.substring(7),16);// blue}else hexStringToARGB("#FF"+ hexARGB.substring(1));return intARGB;}
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);
Respuestas:
Supongo que esto debería hacerlo:
fuente
En realidad, hay una forma más fácil (integrada) de hacer esto:
fuente
fuente
Para el desarrollo de Android , uso:
fuente
Aquí hay una versión que maneja las versiones RGB y RGBA:
fuente
Un código de color hexadecimal es #RRGGBB
RR, GG, BB son valores hexadecimales que van de 0 a 255
Llamemos a RR XY donde X e Y son caracteres hexadecimales 0-9A-F, A = 10, F = 15
El valor decimal es X * 16 + Y
Si RR = B7, el decimal para B es 11, entonces el valor es 11 * 16 + 7 = 183
fuente
puede hacerlo simplemente de la siguiente manera:
Por ejemplo
fuente
Para JavaFX
.
fuente
Conviértalo en un número entero, luego divmodlo dos veces por 16, 256, 4096 o 65536 dependiendo de la longitud de la cadena hexadecimal original (3, 6, 9 o 12 respectivamente).
fuente
Muchas de estas soluciones funcionan, pero esta es una alternativa.
Si no agrega 4278190080 (# FF000000), el color tiene un Alfa de 0 y no se mostrará.
fuente
Para desarrollar la respuesta que @xhh proporcionó, puede agregar el rojo, el verde y el azul para formatear su cadena como "rgb (0,0,0)" antes de devolverla.
fuente
Si no desea utilizar AWT Color.decode, simplemente copie el contenido del método:
Integer.decode maneja el # o 0x, dependiendo de cómo se formatee su cadena
fuente
Aquí hay otra versión más rápida que maneja versiones RGBA:
fuente
La forma más fácil:
fuente
Los códigos de color hexadecimales ya son rgb. El formato es #RRGGBB
fuente
El otro día estuve resolviendo un problema similar y encontré conveniente convertir una cadena de color hexadecimal en una matriz int [alpha, r, g, b]:
fuente
fuente