Java-十进制颜色到RGB颜色
我有一个十进制(不是十六进制)颜色代码,使用Java,我需要将其转换为三种RGB颜色 例如,16777215(纯白色)需要转换为红色:255绿色:255蓝色:255Java-十进制颜色到RGB颜色,java,colors,decimal,rgb,Java,Colors,Decimal,Rgb,我有一个十进制(不是十六进制)颜色代码,使用Java,我需要将其转换为三种RGB颜色 例如,16777215(纯白色)需要转换为红色:255绿色:255蓝色:255 65280(纯绿色)需要转换为红色:0绿色255:蓝色:0是一个转换器,用于更多示例。 只需做一些小计算并在上面链接的页面上玩计算器,我就确定: 红色等于65536(256^2) (255x65536=16711680,又名纯红色) 绿色等于256(256^1) (255x256=65280,又名纯绿色) 蓝色等于1(2
65280(纯绿色)需要转换为红色:0绿色255:蓝色:0
是一个转换器,用于更多示例。
只需做一些小计算并在上面链接的页面上玩计算器,我就确定:
- 红色等于65536(256^2)
- (255x65536=16711680,又名纯红色)
- 绿色等于256(256^1)
- (255x256=65280,又名纯绿色)
- 蓝色等于1(256^0)
- (255x1=255,又名纯蓝色)
Color color = new Color(16777215);
int red = color.getRed();
int green = color.getGreen();
int blue = color.getBlue();
您知道正确的位置:RGB值在
int
中编码为字节。R是字节2,G是字节1,B是字节0,总计为24位颜色深度。根据Endianness,这可能是一种可能的表示形式
00000000 00000000 00000000 00000000 <-- 32bit int
^ ^ ^
| | |
+--red here | +--green here
8bit | 8bit
|
+--blue here
8bit
您可以通过简单的按位操作获取通道
int r = (color >> 16) & 0xff;
int g = (color >> 8) & 0xff;
int b = color & 0xff;
从这里开始,您可以轻松地对颜色信息执行任何操作。十进制、十六进制:无所谓。您的计算机在内部使用二进制表示 您可能已经注意到
0xFF00==65280
十进制和十六进制是用户表示法。我知道我有点晚了,但是
int r = color / 65536;
int g = (color - r * 65536) / 256;
int b = color - r * 65536 - g * 256;
这实际上是在做与二进制移位完全相同的事情,即使它不使用位运算符。这也仅在使用有效的RGB值时有效(意味着每个值都是介于0和255之间的整数)。然而,为了提高效率,我将使用上述答案中的二进制移位 Java有一个直接的颜色构造器,它也可以使用单个int。这正是我所需要的。我不知道整个颜色的存在。非常感谢你!这似乎可以满足我的需要,提供更好的信息,但Reimeus发布的颜色功能正好满足我的需要,而且看起来更简单。非常感谢,希望我能选择两者作为最佳答案是的,我同意。我没有删除此项,因为ASCII艺术可能会帮助您了解RGB值是如何打包到您拥有的数字中的。你绝对应该走@Reimeus路。回答得好!它可以在具有相同解决方案的多种编程语言中使用。即使没有颜色对象可用于执行此操作。
int r = color / 65536;
int g = (color - r * 65536) / 256;
int b = color - r * 65536 - g * 256;