Java-十进制颜色到RGB颜色

Java-十进制颜色到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

我有一个十进制(不是十六进制)颜色代码,使用Java,我需要将其转换为三种RGB颜色

例如,16777215(纯白色)需要转换为红色:255绿色:255蓝色:255
65280(纯绿色)需要转换为红色:0绿色255:蓝色:0

是一个转换器,用于更多示例。
只需做一些小计算并在上面链接的页面上玩计算器,我就确定:

  • 红色等于65536(256^2)
    • (255x65536=16711680,又名纯红色)
  • 绿色等于256(256^1)
    • (255x256=65280,又名纯绿色)
  • 蓝色等于1(256^0)
    • (255x1=255,又名纯蓝色)
我可以说这显然与字节有关,但我缺少最后一点。我对bits/bytes/etc的整个概念以及它与Java的交互方式不是最了解的,因此它可能相当简单

有人知道最好的方法吗?使用java将单个数字十进制颜色转换为三个单独的RGB值的最佳方法是什么?

您可以这样做

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;