我正在创建一个复古仿真器,我不记得如何将单字节转换为RGB值,并将其从RGB转换为单个字节。
我尝试过使用按位的方法,但在这种情况下似乎不起作用。
我发现这个帖子类似于How can I make 3 bytes corresponding to RGB into a single byte?,但是我无法让它工作,因为返回的值大于255。
因此,为了理解,如果任何人过去有一个Atari ST或ZX频谱,彩色托盘是非常紧凑的,可以容纳一个字节,不像今天的4字节rgba。
有人能唤起我的记忆吗?
伪码
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 / ?发布于 2017-01-02 00:44:55
如果使用链接答案上的转换算法
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);https://stackoverflow.com/questions/41420215
复制相似问题