单字节至RGB和RGB到单字节

  • 本文关键字:单字节 RGB 字节 c#
  • 更新时间 :
  • 英文 :


我正在创建一个复古仿真器,并且不记得我的一生如何将单个字节转换为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);

最新更新