2013-09-20 2 views
0

Я пытаюсь сделать кодер/декодер в Java, чтобы я мог хранить значение RGB в формате Hex. У меня есть кодировщик вроде этого:Как кодировать и декодировать RGB в Hex

System.out.println("#" + Integer.toHexString(label.getColor().getRed()) 
    + Integer.toHexString(label.getColor().getGreen()) 
    + Integer.toHexString(label.getColor().getBlue())); 

и декодер, как это:

System.out.println(decodeColor("#" 
    + Integer.toHexString(label.getColor().getRed()) 
    + Integer.toHexString(label.getColor().getGreen()) 
    + Integer.toHexString(label.getColor().getBlue()))); 

Реализация decodeColor() функция:

private RGB decodeColor(String attribute) { 
    Integer intval = Integer.decode(attribute); 
    int i = intval.intValue(); 
    return new RGB((i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF); 
} 

Когда я запускаю тестовую программу, я получаю этот выход:

  • начальные значения ne ж RGB (15, 255, 45)

< \ ярлыком ... цвет = "# fff2d"> ... </метка>

RGB {15, 255, 45}

  • начальные значения RGB (15, 0, 45)

< \ ярлык ... цвет = "# f02d"> ... </метка>

RGB {0, 240, 45}

Так, в некоторых случаях она возвращает правильный результат, но в другой его полностью перепутал. Почему это?

+0

[Это] (https://www.google.co.in/?q=java+rgb+to+hex) может помочь. Также обратитесь к связанным вопросам справа. – devnull

+0

Эти два обсуждения могут быть полезны: http://stackoverflow.com/questions/3607858/how-to-convert-a-rgb-color-value-to-an-hexadecimal-value-in-java и http: // stackoverflow.com/questions/4129666/how-to-convert-hex-to-rgb –

ответ

3

Поскольку #rrggbb всегда требует 2 шестнадцатеричных цифры на цветной компонент.

String s = String.format("#%02x%02x%02x", c.getRed(), c.getGreen(), c.getBlue()); 

Color c = Color.decode(s); 
0
Integer intval = Integer.decode(attribute); 

Здесь строка attribute начинается с #, но она должна начинаться с 0x.

private RGB decodeColor(String attribute) { 
    String hexValue = attribute.replace("#", "0x"); 

    int i = Integer.decode(hexValue).intValue(); 
    return new RGB((i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF); 
} 
Смежные вопросы