2012-05-05 98 views
5

我的應用程序中有一些滑塊允許用戶更改ARGB顏色,但是我需要將這些值轉換爲十六進制值,如0xff000000,它是純黑的。將RGBA值轉換爲十六進制顏色代碼

這是我到目前爲止有:

protected int toHex(Color col) { 
    String as = pad(Integer.toHexString(col.getAlpha())); 
    String rs = pad(Integer.toHexString(col.getRed())); 
    String gs = pad(Integer.toHexString(col.getGreen())); 
    String bs = pad(Integer.toHexString(col.getBlue())); 
    String hex = "0x" + as + rs + gs + bs; 
    return Integer.parseInt(hex, 16); 
} 

private static final String pad(String s) { 
    return (s.length() == 1) ? "0" + s : s; 
} 

然而在獲得整數值如下圖所示,我得到了輸入字符串NumberFormatException異常:「0xccffffff」:

int color = toHex(new Color(153f, 153f, 153f, 0.80f)); 

任何想法上如何獲得這個整數?謝謝。

回答

4

顏色參數必須在1f和0f之間浮動。所以這是一個有效的顏色:

int color = toHex(new Color(1f, 1f, 1f, 1f)); 

這是白色的。

+0

啊,謝謝。現在排序了。我爲我的字體使用Slick,現在我已將Color切換爲java.awt.Color。 – Kaikz

0

問題是你包含alpha值。 所以你的最大顏色代碼是#FFFFFFFF(8位數字)。

方法Integer.parseInt將讓您解析從-0x800000000x7FFFFFFF的值。爲了從中得到你的價值0xCC999999,你將不得不否定價值和輸入-0x33666667 - 這當然是沒有用的。

笨重而穩定的解決方法是使用Long

(int) Long.parseLong(text, 16) 
相關問題