2012-05-05 55 views
5

Tôi có một số thanh trượt trong ứng dụng của mình cho phép người dùng thay đổi màu của ARGB, tuy nhiên tôi cần chuyển đổi các giá trị này thành giá trị hex như 0xff000000, màu đen.Chuyển đổi các giá trị RGBA thành mã màu hex

Đây là những gì tôi có cho đến nay:

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

Tuy nhiên khi nhận được giá trị Integer như dưới đây, tôi nhận được một NumberFormatException cho chuỗi đầu vào: "0xccffffff":

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

Bất kỳ ý tưởng về làm thế nào để có được điều này để một Integer? Cảm ơn.

Trả lời

4

Thông số màu phải nổi giữa 1f và 0f. Vì vậy, đây là màu hợp lệ:

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

Màu trắng.

+0

Ah, cảm ơn. Đã sắp xếp nó ngay bây giờ. Tôi đang sử dụng Slick cho công cụ phông chữ của mình và bây giờ tôi đã chuyển màu thành java.awt.Color. – Kaikz

0

Vấn đề là bạn đang bao gồm các giá trị alpha. Vì vậy, mã màu tối đa của bạn là #FFFFFFFF (8 chữ số).

Phương thức Integer.parseInt sẽ cho phép bạn phân tích giá trị từ -0x80000000 thành 0x7FFFFFFF. Để có được giá trị của bạn 0xCC999999 từ nó, bạn sẽ phải phủ nhận giá trị và nhập -0x33666667 - tất nhiên là không hữu ích chút nào.

Cách giải quyết clunky nhưng ổn định là sử dụng Long.

(int) Long.parseLong(text, 16) 
Các vấn đề liên quan