如何从 ABBBBBGG GGGRRRRR 两个字节格式中读取颜色分量?
How to read color components from ABBBBBGG GGGRRRRR two bytes format?
我有一个正在尝试解码的调色板,但我总是失败,因为我无法理解如何正确地减去某些位值。我总是以一些疯狂的价值观结束。
如何在需要的组件上拆分两个字节?
PS:我添加了 C++ 标签,因为答案与语言无关。
首先,将你的两个字节放入 byte b1
和 byte b0
。
这可能会按如下方式完成:
byte b0 = clr_bytes[0];
byte b1 = clr_bytes[1];
当然,这一切都取决于您的调色板的字节顺序;可能您需要尝试相反的方法:
byte b0 = clr_bytes[1];
byte b1 = clr_bytes[0];
那么你的组件可以计算如下:
byte a = b1 >> 7;
byte b = (b1 >> 2) & 0x1f;
byte g = ((b1 & 0x3) << 3) | (b0 >> 5);
byte r = b0 & 0x1f;
我有一个正在尝试解码的调色板,但我总是失败,因为我无法理解如何正确地减去某些位值。我总是以一些疯狂的价值观结束。
如何在需要的组件上拆分两个字节?
PS:我添加了 C++ 标签,因为答案与语言无关。
首先,将你的两个字节放入 byte b1
和 byte b0
。
这可能会按如下方式完成:
byte b0 = clr_bytes[0];
byte b1 = clr_bytes[1];
当然,这一切都取决于您的调色板的字节顺序;可能您需要尝试相反的方法:
byte b0 = clr_bytes[1];
byte b1 = clr_bytes[0];
那么你的组件可以计算如下:
byte a = b1 >> 7;
byte b = (b1 >> 2) & 0x1f;
byte g = ((b1 & 0x3) << 3) | (b0 >> 5);
byte r = b0 & 0x1f;