我有一个十进制(非十六进制)颜色代码,使用Java,我需要将其转换为三种RGB颜色。
例如,16777215(纯白色)需要转换为红色:255绿色:255蓝色:255。
65280(纯绿色)需要转换为红色:0绿色255:蓝色:0
Here是一个转换器以获取更多示例。
我可以说它显然与字节有关,但我遗漏了最后一点。对于bits / bytes / etc的整个概念以及它如何与Java交互,我不是最好的,所以它可能相当简单。
那么,有谁知道最好的方法呢?使用java将单个数字十进制颜色转换为三个单独的RGB值的最佳方法是什么?
答案 0 :(得分:14)
你说得对:RGB值被编码为int
中的字节。 R是字节2,G是字节1,B是字节0,总计为24位颜色深度。根据字节顺序,这可能是一种可能的表现形式。
00000000 00000000 00000000 00000000 <-- 32bit int
^ ^ ^
| | |
+--red here | +--green here
8bit | 8bit
|
+--blue here
8bit
您可以通过一些位移和屏蔽来提取RGB值:
int red = (color >> 16) & 0xff;
int green = (color >> 8) & 0xff;
int blue = color & 0xff;
答案 1 :(得分:6)
你可以做到
Color color = new Color(16777215);
int red = color.getRed();
int green = color.getGreen();
int blue = color.getBlue();
答案 2 :(得分:1)
您可以通过简单的按位操作来获取通道。
int r = (color >> 16) & 0xff;
int g = (color >> 8) & 0xff;
int b = color & 0xff;
从那里开始,应该很容易用颜色信息做任何你想做的事。
答案 3 :(得分:1)
十进制,十六进制:无关紧要。您的计算机在内部使用二进制表示。
您可能已经注意到0xFF00 == 65280
。
十进制和十六进制是用户表示。
答案 4 :(得分:0)
我知道我有点晚了,但是......
int r = color / 65536;
int g = (color - r * 65536) / 256;
int b = color - r * 65536 - g * 256;
这实际上与二进制移位完全相同,即使它不使用按位运算符。这也仅在使用有效RGB值时有效(意味着每个值都是0到255之间的整数)。然而,为了提高效率,我将使用上述答案的二进制移位。