2010-11-09 42 views
63

Làm cách nào để chuyển đổi màu hex thành mã RGB trong Java? Chủ yếu là trong Google, các mẫu là làm thế nào để chuyển đổi từ RGB sang hex.Làm thế nào để chuyển đổi hex sang rgb bằng cách sử dụng Java?

+0

Bạn có thể cho ví dụ về những gì bạn đang cố gắng chuyển đổi và những gì bạn đang cố gắng chuyển đổi không? Nó không rõ ràng chính xác những gì bạn đang cố gắng làm. – kkress

+0

000000 sẽ chuyển thành màu đen rgb – user236501

Trả lời

137

Tôi đoán đây nên làm điều đó:

/** 
* 
* @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)); 
} 
+0

Đối với những người muốn có phiên bản 3 ký tự, lưu ý rằng trong trường hợp 3 ký tự, mỗi giá trị phải là * 255/16. Tôi đã thử nghiệm điều này bằng "000", "aaa" và "fff" và tất cả đều hoạt động bình thường hiện nay. – Andrew

2

Chuyển đổi thành số nguyên, sau đó chia nó hai lần 16, 256, 4096 hoặc 65536 tùy thuộc vào độ dài của chuỗi hex gốc (3, 6, 9 hoặc 12 tương ứng).

1

Mã màu hexidecimal đã được rgb. Định dạng là #RRGGBB

+3

Trừ khi nó là #RGB, #RRRGGGBBB hoặC#RRRRGGGGBBBB. –

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

Một hex mã màu là #RRGGBB

RR, GG, BB là những giá trị hex dao động 0-255

Hãy XY gọi RR trong đó X và Y là hex nhân vật 0-9A-F, A = 10, F = 15

giá trị thập phân là X * 1 6 + Y

Nếu RR = B7, các số thập phân cho B là 11, vì vậy giá trị là 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; 
} 
171

Trên thực tế, có một dễ dàng hơn (built in) cách để làm điều này:

Color.decode("#FFCCEE"); 
+2

thật không may là AWT:/ – wuppi

+2

@wuppi Tôi nghĩ đó thực sự là tin tốt, vì AWT có trong JDK. Thật không may về nó? –

+0

RCP Eclipse là SWT, mà tôi đang làm việc cùng. – wuppi

19

Đối phát triển Android, tôi sử dụng:

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

Chỉ cần thay thế '#' bằng '0x' –

1

Để xây dựng vào ngày e trả lời @ xhh được cung cấp, bạn có thể nối màu đỏ, xanh lục và xanh dương để định dạng chuỗi của bạn là "rgb (0,0,0)" trước khi trả lại.

/** 
* 
* @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(); 
} 
3

bạn có thể làm điều đó chỉ đơn giản như sau:

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; 
} 

Ví dụ

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

Rất nhiều các giải pháp làm việc, nhưng đây là một sự thay thế.

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

Nếu bạn không thêm 4278190080 (# FF000000) màu có độ alpha là 0 và sẽ không hiển thị.

0

Ngày hôm kia tôi đã được giải quyết vấn đề tương tự và thấy thuận tiện để chuyển đổi chuỗi hex màu để 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; 
} 
3

Đây là một phiên bản để xử lý cả hai RGB và RGBA phiên bản:

/** 
* 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; 
} 
0

Nếu bạn không muốn sử dụng AWT Color.decode, sau đó chỉ cần sao chép nội dung của phương pháp:

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

Số nguyên.giải mã xử lý # hoặc 0x, tùy thuộc vào cách chuỗi của bạn được định dạng

Các vấn đề liên quan