C# 将16位亮度值转换为32位RGB

C# 将16位亮度值转换为32位RGB,c#,.net,image,C#,.net,Image,我有一个16位的亮度值存储在两个字节中,我想把它转换成R、G和B值。我有两个问题:如何将这两个字节转换为短字节,并假设色调和饱和度为0,如何将短字节转换为每个分量8位的RGB值 (Convert类没有一个选项,可以获取两个字节并输出一个短字节。)尝试以下方法: byte luminance_upper = 23; byte luminance_lower = 57; int luminance = ((int)luminance_upper << 8) | (int)luminanc

我有一个16位的亮度值存储在两个字节中,我想把它转换成R、G和B值。我有两个问题:如何将这两个字节转换为短字节,并假设色调和饱和度为0,如何将短字节转换为每个分量8位的RGB值


(Convert类没有一个选项,可以获取两个字节并输出一个短字节。)

尝试以下方法:

byte luminance_upper = 23;
byte luminance_lower = 57;
int luminance = ((int)luminance_upper << 8) | (int)luminance_lower;
字节亮度\u上限=23;
字节亮度_下限=57;

int-luminance=((int)luminance\u upper尝试以下方法:

byte luminance_upper = 23;
byte luminance_lower = 57;
int luminance = ((int)luminance_upper << 8) | (int)luminance_lower;
字节亮度\u上限=23;
字节亮度_下限=57;

int luminance=((int)luminance_upper您还需要其他组件(色调和饱和度)

另外,16位听起来有点奇怪。通常这些值是浮点值


有一篇关于CodeProject的非常好的文章,介绍了许多颜色空间的转换。

您还需要其他组件(色调和饱和度)

另外,16位听起来有点奇怪。通常这些值是浮点值


有一篇非常好的关于CodeProject的文章,介绍了许多颜色空间的转换。

如果16位的值是小尾数且无符号的,那么第2个字节就是要重复3次以创建RGB值的字节,然后删除另一个字节。或者,如果希望RGB是32位整数,则可以使用位移位和加法,或者只是将t相乘第二个字节乘以0x10101。

如果16位的值是小尾数且无符号的,则第二个字节将是要重复3次以创建RGB值的字节,然后删除另一个字节。或者,如果希望RGB为32位整数,则可以使用位移位和相加,或者将第二个字节乘以0x10101。

乘以“32位灰度值”他指的是“alpha,R,G,B,其中每个是8位,R=G=B。”通过“32位灰度值”,他指的是“alpha,R,G,B,其中每个是8位,R=G=B。”