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

Hosting a Color.argb(a,r,g,b) inside a byte without losing information

标题里面的问题差不多了。

我想在一个字节中托管一个颜色,而不会丢失任何信息,请记住 Color.argb 实际上是一个整数。

Byte colorToSave;

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

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

不,不可能 - 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 转换为一个字节,它显示我们 return 蓝色的颜色