Bagaimana cara mengubah hex ke rgb menggunakan Java?


96

Bagaimana cara mengubah warna hex menjadi kode RGB di Java? Sebagian besar di Google, contoh adalah tentang cara mengonversi dari RGB ke hex.


Dapatkah Anda memberikan contoh tentang apa yang Anda coba konversi dan Anda coba konversi? Tidak jelas persis apa yang Anda coba lakukan.
kkress

000000 akan diubah menjadi warna hitam rgb
user236501

Jawaban:


161

Saya rasa ini harus dilakukan:

/**
 * 
 * @param colorStr e.g. "#FFFFFF"
 * @return 
 */
public static Color hex2Rgb(String colorStr) {
    return new Color(
            Integer.valueOf( colorStr.substring( 1, 3 ), 16 ),
            Integer.valueOf( colorStr.substring( 3, 5 ), 16 ),
            Integer.valueOf( colorStr.substring( 5, 7 ), 16 ) );
}

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.decode("#FFCCEE");

3
sayangnya itu adalah AWT: /
wuppi

6
@wuppi Saya pikir itu sebenarnya kabar baik, karena AWT ada di JDK. Apa yang sangat disayangkan tentang itu?
Dmitry Avtonomov

19
Solusi yang diterima juga menggunakan AWT. AWT bukanlah masalah bagi penanya asli. Ini harus menjadi solusi yang diterima.
jewbix.cube

6
Di android: Color.parseColor ()
Dawid Drozd

37
public static void main(String[] args) {
    int hex = 0x123456;
    int r = (hex & 0xFF0000) >> 16;
    int g = (hex & 0xFF00) >> 8;
    int b = (hex & 0xFF);
}

26

Untuk pengembangan Android , saya menggunakan:

int color = Color.parseColor("#123456");

Cukup ganti '#' dengan '0x'
Julian Os

1
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
 */
public static Color HexToColor(String hex) 
{
    hex = hex.replace("#", "");
    switch (hex.length()) {
        case 6:
            return new Color(
            Integer.valueOf(hex.substring(0, 2), 16),
            Integer.valueOf(hex.substring(2, 4), 16),
            Integer.valueOf(hex.substring(4, 6), 16));
        case 8:
            return new Color(
            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));
    }
    return null;
}

Ini berguna bagi saya karena Integer.toHexString mendukung saluran alfa, tetapi Integer.decode atau Color.decode tampaknya tidak berfungsi dengannya.
Ted

4

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

public int[] getRGB(String rgb){
    int[] ret = new int[3];
    for(int i=0; i<3; i++){
        ret[i] = hexToInt(rgb.charAt(i*2), rgb.charAt(i*2+1));
    }
    return ret;
}

public int hexToInt(char a, char b){
    int x = a < 65 ? a-48 : a-55;
    int y = b < 65 ? b-48 : b-55;
    return x*16+y;
}

4

Anda dapat melakukannya seperti di bawah ini:

 public static int[] getRGB(final String rgb)
{
    final int[] ret = new int[3];
    for (int i = 0; i < 3; i++)
    {
        ret[i] = Integer.parseInt(rgb.substring(i * 2, i * 2 + 2), 16);
    }
    return ret;
}

Sebagai contoh

getRGB("444444") = 68,68,68   
getRGB("FFFFFF") = 255,255,255

2

Untuk JavaFX

import javafx.scene.paint.Color;

.

Color whiteColor = Color.valueOf("#ffffff");

1

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).


1

Banyak solusi ini berfungsi, tetapi ini adalah alternatif.

String hex="#00FF00"; // green
long thisCol=Long.decode(hex)+4278190080L;
int useColour=(int)thisCol;

Jika Anda tidak menambahkan 4278190080 (# FF000000) warna memiliki Alpha 0 dan tidak akan ditampilkan.


0

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.

/**
* 
* @param colorStr e.g. "#FFFFFF"
* @return String - formatted "rgb(0,0,0)"
*/
public static String hex2Rgb(String colorStr) {
    Color c = new Color(
        Integer.valueOf(hexString.substring(1, 3), 16), 
        Integer.valueOf(hexString.substring(3, 5), 16), 
        Integer.valueOf(hexString.substring(5, 7), 16));

    StringBuffer sb = new StringBuffer();
    sb.append("rgb(");
    sb.append(c.getRed());
    sb.append(",");
    sb.append(c.getGreen());
    sb.append(",");
    sb.append(c.getBlue());
    sb.append(")");
    return sb.toString();
}

0

Jika Anda tidak ingin menggunakan AWT Color.decode, cukup salin konten metode:

int i = Integer.decode("#FFFFFF");
int[] rgb = new int[]{(i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF};

Integer.decode menangani # atau 0x, bergantung pada bagaimana string Anda diformat


0

Ini adalah versi lain yang lebih cepat yang menangani versi RGBA:

public static int hexToIntColor(String hex){
    int Alpha = Integer.valueOf(hex.substring(0, 2), 16);
    int Red = Integer.valueOf(hex.substring(2, 4), 16);
    int Green = Integer.valueOf(hex.substring(4, 6), 16);
    int Blue = Integer.valueOf(hex.substring(6, 8), 16);
    Alpha = (Alpha << 24) & 0xFF000000;
    Red = (Red << 16) & 0x00FF0000;
    Green = (Green << 8) & 0x0000FF00;
    Blue = Blue & 0x000000FF;
    return Alpha | Red | Green | Blue;
}

0

Cara termudah:

// 0000FF
public static Color hex2Rgb(String colorStr) {
    return new Color(Integer.valueOf(colorStr, 16));
}


-1

Beberapa hari yang lalu saya telah memecahkan masalah serupa dan merasa nyaman untuk mengubah string warna hex menjadi int array [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
 */

public static int[] hexStringToARGB(String hexARGB) throws IllegalArgumentException {

    if (!hexARGB.startsWith("#") || !(hexARGB.length() == 7 || hexARGB.length() == 9)) {

        throw new IllegalArgumentException("Hex color string is incorrect!");
    }

    int[] intARGB = new int[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;
}

-1
For shortened hex code like #fff or #000

int 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);

bagaimana dengan #eee?
Boni2k
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.