Bagi mereka yang menginginkan versi 3 karakter juga, perhatikan bahwa dalam kasus 3 karakter setiap nilai harus * 255/16. Saya menguji ini dengan "000", "aaa", dan "fff", dan semuanya berfungsi dengan baik sekarang .
Andrew
283
Sebenarnya, ada cara (bawaan) yang lebih mudah untuk melakukan ini:
Color.parseColor tidak mendukung Warna dengan tiga digit seperti ini:
#fff
U dapat mencoba di bawah ini dari #fff int red = colorString.charAt (1) == '0'? 0: 255; int blue = colorString.charAt (2) == '0'? 0: 255; int hijau = colorString.charAt (3) == '0'? 0: 255; Color.rgb (merah, hijau, biru);
GTID
9
Ini adalah versi yang menangani versi RGB dan 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;}
Ubah menjadi bilangan bulat, lalu lakukan divmod dua kali dengan 16, 256, 4096, atau 65536 bergantung pada panjang string hex asli (masing-masing 3, 6, 9, atau 12).
Untuk menguraikan jawaban yang diberikan @xhh, Anda dapat menambahkan warna merah, hijau, dan biru untuk memformat string Anda sebagai "rgb (0,0,0)" sebelum mengembalikannya.
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);
Jawaban:
Saya rasa ini harus dilakukan:
sumber
Sebenarnya, ada cara (bawaan) yang lebih mudah untuk melakukan ini:
sumber
sumber
Untuk pengembangan Android , saya menggunakan:
sumber
Ini adalah versi yang menangani versi RGB dan RGBA:
sumber
Kode warna hex adalah #RRGGBB
RR, GG, BB adalah nilai hex mulai dari 0-255
Sebut saja RR XY dimana X dan Y adalah karakter hex 0-9A-F, A = 10, F = 15
Nilai desimalnya adalah X * 16 + Y
Jika RR = B7, desimal untuk B adalah 11, jadi nilainya adalah 11 * 16 + 7 = 183
sumber
Anda dapat melakukannya seperti di bawah ini:
Sebagai contoh
sumber
Untuk JavaFX
.
sumber
Ubah menjadi bilangan bulat, lalu lakukan divmod dua kali dengan 16, 256, 4096, atau 65536 bergantung pada panjang string hex asli (masing-masing 3, 6, 9, atau 12).
sumber
Banyak solusi ini berfungsi, tetapi ini adalah alternatif.
Jika Anda tidak menambahkan 4278190080 (# FF000000) warna memiliki Alpha 0 dan tidak akan ditampilkan.
sumber
Untuk menguraikan jawaban yang diberikan @xhh, Anda dapat menambahkan warna merah, hijau, dan biru untuk memformat string Anda sebagai "rgb (0,0,0)" sebelum mengembalikannya.
sumber
Jika Anda tidak ingin menggunakan AWT Color.decode, cukup salin konten metode:
Integer.decode menangani # atau 0x, bergantung pada bagaimana string Anda diformat
sumber
Ini adalah versi lain yang lebih cepat yang menangani versi RGBA:
sumber
Cara termudah:
sumber
Kode warna heksadesimal sudah menjadi rgb. Formatnya adalah #RRGGBB
sumber
Beberapa hari yang lalu saya telah memecahkan masalah serupa dan merasa nyaman untuk mengubah string warna hex menjadi int array [alpha, r, g, b]:
sumber
sumber