2012-05-05 23 views
5

私のアプリケーションにはARGBカラーを変更できるスライダがいくつかありますが、これらの値は0xff000000のような16進値に変換する必要があります。RGBA値を16進数のカラーコードに変換する

これは私がこれまで持っているものです。

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

問題は、アルファ値を含むことです。 最大カラーコードは#FFFFFFFF(8桁)です。

メソッドInteger.parseIntは、-0x80000000から0x7FFFFFFFまでの値を解析できるようにします。値0xCC999999を取得するには、値を無効にして-0x33666667を入力する必要がありますが、これはまったく役に立ちません。

不安定ですが安定した回避策はLongを使用しています。

(int) Long.parseLong(text, 16) 
関連する問題