Você pode dar um exemplo do que você está tentando converter e para o que está tentando se converter? Não está claro exatamente o que você está tentando fazer.
Para aqueles que querem uma versão de 3 caracteres também, observe que no caso de 3 caracteres cada valor deve ser * 255 / 16. Eu testei isso com "000", "aaa" e "fff", e todos eles funcionam corretamente agora .
Andrew
283
Na verdade, existe uma maneira mais fácil (integrada) de fazer isso:
Color.parseColor não oferece suporte a cores com três dígitos como este: #fff
neoexpert
Você pode tentar abaixo 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 (vermelho, verde, azul);
GTID
9
Aqui está uma versão que lida com as versões RGB e 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;}
Converta-o para um número inteiro e divmod-o duas vezes por 16, 256, 4096 ou 65536, dependendo do comprimento da string hexadecimal original (3, 6, 9 ou 12, respectivamente).
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);
Respostas:
Eu acho que isso deve bastar:
fonte
Na verdade, existe uma maneira mais fácil (integrada) de fazer isso:
fonte
fonte
Para desenvolvimento Android , eu uso:
fonte
Aqui está uma versão que lida com as versões RGB e RGBA:
fonte
Um código de cor hexadecimal é #RRGGBB
RR, GG, BB são valores hexadecimais variando de 0-255
Vamos chamar RR XY onde X e Y são caracteres hexadecimais 0-9A-F, A = 10, F = 15
O valor decimal é X * 16 + Y
Se RR = B7, o decimal para B é 11, então o valor é 11 * 16 + 7 = 183
fonte
você pode fazer isso simplesmente como abaixo:
Por exemplo
fonte
Para JavaFX
.
fonte
Converta-o para um número inteiro e divmod-o duas vezes por 16, 256, 4096 ou 65536, dependendo do comprimento da string hexadecimal original (3, 6, 9 ou 12, respectivamente).
fonte
Muitas dessas soluções funcionam, mas esta é uma alternativa.
Se você não adicionar 4278190080 (# FF000000), a cor terá um Alpha de 0 e não será exibida.
fonte
Para elaborar a resposta @xhh fornecida, você pode adicionar vermelho, verde e azul para formatar sua string como "rgb (0,0,0)" antes de retorná-la.
fonte
Se você não quiser usar o AWT Color.decode, basta copiar o conteúdo do método:
Integer.decode lida com # ou 0x, dependendo de como sua string está formatada
fonte
Aqui está outra versão mais rápida que lida com versões RGBA:
fonte
A maneira mais fácil:
fonte
Os códigos de cores hexadecimais já são rgb. O formato é #RRGGBB
fonte
Outro dia, eu estava resolvendo um problema semelhante e achei conveniente converter string de cores hexadecimais em matriz int [alpha, r, g, b]:
fonte
fonte