Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从abbbbgggrrrrrr两字节格式读取颜色分量?_C#_C++_Bit - Fatal编程技术网

C# 如何从abbbbgggrrrrrr两字节格式读取颜色分量?

C# 如何从abbbbgggrrrrrr两字节格式读取颜色分量?,c#,c++,bit,C#,C++,Bit,我有一个调色板,我试图解码,但我总是失败,因为我不知道如何正确减去某些位值。我总是以一些疯狂的价值观结束 如何在需要的组件上拆分两个字节 PS:我添加了C++标签,因为答案不是语言依赖的。 首先,获得两个字节,比如,代码>字节B1< /COD>和字节B0< /Cord> 这可能按以下方式进行: byte b0 = clr_bytes[0]; byte b1 = clr_bytes[1]; byte a = b1 >> 7; byte b = (b1 >> 2) &am

我有一个调色板,我试图解码,但我总是失败,因为我不知道如何正确减去某些位值。我总是以一些疯狂的价值观结束

如何在需要的组件上拆分两个字节


PS:我添加了C++标签,因为答案不是语言依赖的。

首先,获得两个字节,比如,代码>字节B1< /COD>和<代码>字节B0< /Cord> 这可能按以下方式进行:

byte b0 = clr_bytes[0];
byte b1 = clr_bytes[1];
byte a = b1 >> 7;
byte b = (b1 >> 2) & 0x1f;
byte g = ((b1 & 0x3) << 3) | (b0 >> 5);
byte r = b0 & 0x1f;
当然,这一切都取决于调色板的持久性;您可能需要尝试相反的方法:

byte b0 = clr_bytes[1];
byte b1 = clr_bytes[0];
然后可以按如下方式计算组件:

byte b0 = clr_bytes[0];
byte b1 = clr_bytes[1];
byte a = b1 >> 7;
byte b = (b1 >> 2) & 0x1f;
byte g = ((b1 & 0x3) << 3) | (b0 >> 5);
byte r = b0 & 0x1f;
字节a=b1>>7;
字节b=(b1>>2)和0x1f;
字节g=((b1和0x3)>5);
字节r=b0&0x1f;

首先,输入两个字节,比如说,
字节b1
字节b0

这可能按以下方式进行:

byte b0 = clr_bytes[0];
byte b1 = clr_bytes[1];
byte a = b1 >> 7;
byte b = (b1 >> 2) & 0x1f;
byte g = ((b1 & 0x3) << 3) | (b0 >> 5);
byte r = b0 & 0x1f;
当然,这一切都取决于调色板的持久性;您可能需要尝试相反的方法:

byte b0 = clr_bytes[1];
byte b1 = clr_bytes[0];
然后可以按如下方式计算组件:

byte b0 = clr_bytes[0];
byte b1 = clr_bytes[1];
byte a = b1 >> 7;
byte b = (b1 >> 2) & 0x1f;
byte g = ((b1 & 0x3) << 3) | (b0 >> 5);
byte r = b0 & 0x1f;
字节a=b1>>7;
字节b=(b1>>2)和0x1f;
字节g=((b1和0x3)>5);
字节r=b0&0x1f;

谢谢。这将提供至少0-255个值。但即使我切换endianness,图像仍然有错误的颜色。这可能是由于其他问题。例如,我不知道您试图用
colors.Add(px)实现什么东西。我建议你试着一次解决一个问题。首先,确保您可以将abbbbgggrrrr格式正确解码为
a
b
g
r
。然后,解决之后发生的问题,明白了。有了它,我只需将解码后的颜色添加到列表中。稍后我将阅读位图,这是8bpp索引颜色。256色调色板。我会试着理解那里发生了什么。结果出来了,我需要反转每个组件以获得正确的颜色。谢谢,谢谢。这将提供至少0-255个值。但即使我切换endianness,图像仍然有错误的颜色。这可能是由于其他问题。例如,我不知道您试图用
colors.Add(px)实现什么东西。我建议你试着一次解决一个问题。首先,确保您可以将abbbbgggrrrr格式正确解码为
a
b
g
r
。然后,解决之后发生的问题,明白了。有了它,我只需将解码后的颜色添加到列表中。稍后我将阅读位图,这是8bpp索引颜色。256色调色板。我会试着理解那里发生了什么。结果出来了,我需要反转每个组件以获得正确的颜色。非常感谢。