Java Color将RGB编码为单个整数?

时间:2017-07-20 23:30:30

标签: java colors bit-manipulation rgb

我正在阅读“Java The Complete Reference Ninth Edition”,作者给出了这个例子,用一个整数来创建一个Color对象,该整数对他所说的RGB值进行编码:

  

整数在16到23位中以红色组织,以绿色为单位组织   8到15,蓝色位0到7.以下是此构造函数的示例:

int newRed = (0xff000000 | (0xc0 << 16) | (0x00 << 8) | 0x00);
Color darkRed = new Color(newRed);

0xff000000 in hexadecimal is equivalent to  0b11111111000000000000000000000000 in binary

这是一个32位整数... 我理解按位操作,但我不明白的是:

在数字的开头有什么用?为什么不从零开始

2 个答案:

答案 0 :(得分:4)

The Javadocs for Color解释Java Color类包含alpha通道以及RGB - 因此以全零开头的颜色将完全透明。 0xff000000表示的颜色为不透明黑色。

在这种情况下,作者当然犯了错误。单参数构造函数忽略高字节。相反,它应该使用new Color(0xffc00000, true),如果他想指定alpha(或更简单地说,new Color(0xc0, 0, 0, 0xff))。

答案 1 :(得分:1)

我想你的意思是问为什么0xff000000被添加到聚会上 它实际上取决于实施 我的猜测是两种选择之一:
1.颜色对这些位没有任何作用,只是为了安全起见,你将不相关的位设置为1(因此红色溢出不会有任何不同)。
那是alpha通道(这比前者更有意义)

编辑:
现在我意识到你在谈论awt Color对象,所以正确答案是选项号。 2。