在字节内托管Color.argb(a,r,g,b)而不会丢失信息

时间:2015-02-19 08:32:53

标签: java byte

问题几乎在标题内。

我希望在一个字节内容一个颜色而不丢失任何信息,请记住Color.argb实际上是一个int。

Byte colorToSave;

colorToSave = Color.argb(255, 255,0, 100);

据我所知,这几乎是不可能的,但也许有人找到了一个很好的解决方法。

1 个答案:

答案 0 :(得分:2)

不可能 - Color.argb的核心是一些按位操作 -

alpha << 24) | (red << 16) | (green << 8) | blue;

因此,如果我们将您的值(255,255,0,100)分解,您可以看到您可以看到精度损失 -

int alpha  = 255;
System.out.println(Integer.toBinaryString(alpha));
int red = 255;
System.out.println(Integer.toBinaryString(red));
int green = 0;
System.out.println(Integer.toBinaryString(green));
int blue = 100;
System.out.println(Integer.toBinaryString(blue));
int argb = 255<<24 | 255 << 16 | 0 << 8 | 100;
System.out.println(Integer.toBinaryString(argb));
byte argbbyte = (byte) argb;
System.out.println(Integer.toBinaryString(argbbyte));

制作输出 -

11111111
11111111
0
1100100
11111111111111110000000001100100
1100100

输出的最后一部分是将int转换为一个字节,显示我们返回蓝色的颜色