我正在尝试用Java编写编码器/解码器,因此我可以将RGB值存储为十六进制格式。我有这样的编码器:
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);
}
当我运行测试程序时,我得到了这个输出:
< \ label ... color =“#fff2d”> ...< / label>
RGB {15,255,45}
< \ label ... color =“#f02d”> ...< / label>
RGB {0,240,45}
因此,在某些情况下,它会返回正确的结果,但在其他情况下,它会完全混乱。那是为什么?
答案 0 :(得分:3)
因为#rrggbb每个颜色组件总是需要2个十六进制数字。
String s = String.format("#%02x%02x%02x", c.getRed(), c.getGreen(), c.getBlue());
Color c = Color.decode(s);
答案 1 :(得分: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);
}