我正在创建一个复古仿真器,并且不记得我的一生如何将单个字节转换为rgb值,然后从rgb返回单个字节。
我已经尝试使用比特方法,但似乎对这种情况不起作用。
我发现了这篇文章类似的帖子,我该如何将与RGB相对应的3个字节变成一个字节?
因此,为了理解,如果任何人曾经有Atari st或ZX频谱,颜色托盘非常紧凑,可以适合一个字节,而不是今天的4个字节RGBA。
任何人都可以慢跑我的记忆吗?
pseudocode
int R = 1 (range 0 to 6);
int G = 3 (range 0 to 6);
int B = 5 (range 0 to 6);
// Convert values to single byte
byte myByte = (R << 2) + (G << 1) + (B)
// Convert byte back to RGB
R = myByte / ?;
G = myByte / ?;
B = myByte / ?
如果使用链接答案给出的转换算法
rgb8 = [(Red / 32) << 5] + [(Green / 32) << 2] + (Blue / 64)
现在获得RGB
byte R = (byte) ((rgb8 & 0xE0) >> 5); // rgb8 & 1110 0000 >> 5
byte G = (byte) ((rgb8 & 0x1C) >> 2); // rgb8 & 0001 1100 >> 2
byte B = (byte) (rgb8 & 0x03); // rgb8 & 0000 0011
并将其再次包装在一个字节中
byte RGB = (byte)((R << 5) | (G << 2) | B);