2012-05-05 4 views
5

사용자가 ARGB 색상을 변경할 수있는 일부 슬라이더가 있지만이 값을 검은 색으로 된 0xff000000과 같은 16 진수 값으로 변환해야합니다. 에RGBA 값을 16 진수 색상 코드로 변환

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

어떤 아이디어 "0xccffffff"

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

그러나 다음과 같은 정수 값을 얻기에, I는 입력 문자열에 대한 NumberFormatException이 얻을 :

내가 지금까지 무엇을 가지고 이것을 Integer로 가져 오는 방법? 감사.

답변

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) 
관련 문제