2013-08-20 61 views
0

我已經創建了一個將三個整數值轉換爲十六進制值(字符串)的方法,如下所示(PS:尚未測試過):將顏色RGB轉換爲HEX(int結果)

protected String convertRGBToHex(int r, int g, int b) { 

    String rFString, rSString, gFString, gSString, bFString, bSString, result; 
    int red, green, blue; 
    int rred, rgreen, rblue; 

    red = r/16; 
    rred = r % 16; 

    if (red == 10) rFString = "A"; 
    else if (red == 11) rFString = "B"; 
    else if (red == 12) rFString = "C"; 
    else if (red == 13) rFString = "D"; 
    else if (red == 14) rFString = "E"; 
    else if (red == 15) rFString = "F"; 
    else rFString = String.valueOf(red); 

    if (rred == 10) rSString = "A"; 
    else if (rred == 11) rSString = "B"; 
    else if (rred == 12) rSString = "C"; 
    else if (rred == 13) rSString = "D"; 
    else if (rred == 14) rSString = "E"; 
    else if (rred == 15) rSString = "F"; 
    else rSString = String.valueOf(rred); 

    rFString = rFString + rSString; 

    green = g/16; 
    rgreen = g % 16; 

    if (green == 10) gFString = "A"; 
    else if (green == 11) gFString = "B"; 
    else if (green == 12) gFString = "C"; 
    else if (green == 13) gFString = "D"; 
    else if (green == 14) gFString = "E"; 
    else if (green == 15) gFString = "F"; 
    else gFString = String.valueOf(green); 

    if (rgreen == 10) gSString = "A"; 
    else if (rgreen == 11) gSString = "B"; 
    else if (rgreen == 12) gSString = "C"; 
    else if (rgreen == 13) gSString = "D"; 
    else if (rgreen == 14) gSString = "E"; 
    else if (rgreen == 15) gSString = "F"; 
    else gSString = String.valueOf(rgreen); 

    gFString = gFString + gSString; 

    blue = b/16; 
    rblue = b % 16; 

    if (blue == 10) bFString = "A"; 
    else if (blue == 11) bFString = "B"; 
    else if (blue == 12) bFString = "C"; 
    else if (blue == 13) bFString = "D"; 
    else if (blue == 14) bFString = "E"; 
    else if (blue == 15) bFString = "F"; 
    else bFString = String.valueOf(blue); 

    if (rblue == 10) bSString = "A"; 
    else if (rblue == 11) bSString = "B"; 
    else if (rblue == 12) bSString = "C"; 
    else if (rblue == 13) bSString = "D"; 
    else if (rblue == 14) bSString = "E"; 
    else if (rblue == 15) bSString = "F"; 
    else bSString = String.valueOf(rblue); 

    bFString = bFString + bSString; 

    result = "#" + rFString + gFString + bFString; 

    return result; 

} 

我的問題是:有,我可以在這個字符串結果轉換爲int值,我可以用這樣的方式的方式:

view.setBackgroundColor(0xF82619); 

或者是療法的方式爲int的字符串轉換和比它(沒有崩潰):

view.setBackgroundColor(result); 

謝謝!

+0

你爲什麼不直接轉換成int值以十六進制 – karan421

+1

不要寫是一個int轉換爲十六進制字符串值的方法。這是一項基本任務,語言(或基礎API)將始終提供執行該任務的方法(或函數)。在java中,String.format()是方法;試試這個:String output = String.format(「#%02x%02x%02x」,10,11,56); – DwB

回答

3

假設你的字符串是

String col = "0xF82619"; 

嘗試:

view.setBackgroundColor(Color.parseColor(col)); 
+0

有一個更簡單的方法.... – VoronoiPotato

2

將其轉換爲第一個字符串,然後直接十六進制轉換它由

Integer.valueOf(String.valueOf(n), 16); 

它會爲十六進制,而不是提高你的代碼的性能。

3

爲了得到一個整數,你可以做

int col = (0xff << 24) | ((r&0xff) << 16) | ((g&0xff) << 8) | (b&0xff); 

更爲容易的是:

int col = Color.rgb(r, g, b); 
+0

亨利,它不工作: int r = 255,g = 40,b = 100; int col =((r&0xff)<< 16)| ((g&0xff)<< 8)| (b &0xff); view.setBackgroundColor(col); – Dehumanizer

+1

是的,我忘記了alpha通道,一個不透明的顏色有alpha255。查看更新後的答案。 – Henry