C# C语言中从10位数字到16位颜色的基数#

C# C语言中从10位数字到16位颜色的基数#,c#,math,colors,base,C#,Math,Colors,Base,我试图将16位颜色深度的65536种颜色表示为10进制整数,但我遇到了麻烦 基本上,我需要将一个基数为10的数字转换成一个颜色对象,表示16位光谱中的颜色。我认为底色在这里很重要,但我无法决定使用哪个底色。16位颜色空间使用5位表示红色通道,6位表示绿色通道,5位表示蓝色通道。可以使用逐位操作提取每个通道的值 int color = /* your 16 bit value here */ int red = color & 31; int green = (color >>

我试图将16位颜色深度的65536种颜色表示为10进制整数,但我遇到了麻烦


基本上,我需要将一个基数为10的数字转换成一个颜色对象,表示16位光谱中的颜色。我认为底色在这里很重要,但我无法决定使用哪个底色。

16位颜色空间使用5位表示红色通道,6位表示绿色通道,5位表示蓝色通道。可以使用逐位操作提取每个通道的值

int color = /* your 16 bit value here */

int red = color & 31;
int green = (color >> 5) & 63;
int blue = color >> 11;
要转换回,请使用

int color = red | green << 5 | blue << 11;

int color=red | green16位颜色空间使用5位表示红色通道,6位表示绿色通道,5位表示蓝色通道。可以使用逐位操作提取每个通道的值

int color = /* your 16 bit value here */

int red = color & 31;
int green = (color >> 5) & 63;
int blue = color >> 11;
要转换回,请使用

int color = red | green << 5 | blue << 11;

int color=red | green16位颜色空间使用5位表示红色通道,6位表示绿色通道,5位表示蓝色通道。可以使用逐位操作提取每个通道的值

int color = /* your 16 bit value here */

int red = color & 31;
int green = (color >> 5) & 63;
int blue = color >> 11;
要转换回,请使用

int color = red | green << 5 | blue << 11;

int color=red | green16位颜色空间使用5位表示红色通道,6位表示绿色通道,5位表示蓝色通道。可以使用逐位操作提取每个通道的值

int color = /* your 16 bit value here */

int red = color & 31;
int green = (color >> 5) & 63;
int blue = color >> 11;
要转换回,请使用

int color = red | green << 5 | blue << 11;

int color=red | green颜色对象包含ARGB中的颜色。A代表阿尔法,你现在不需要。其他是红色、绿色和蓝色的值。它们每个都是8位值。ARG和B一起构成32位颜色

16位的颜色一开始就很奇怪,因为红色和蓝色有5位,绿色有6位

要将它们转换为8位,可以对它们进行位移位(或相乘)

这是相当准确的。例如,对于绿色,一个6位数字,最高值(全部6位设置)是63。位集的下半部分,结果为7(最大值的1/9)。当你移动这两个位置转换成8位数字时,得到28,也就是255的1/9。如果你尝试其他几个例子,你会发现每个例子都非常接近。最大的舍入误差,你可以在光谱的末端找到。例如,63是16位中最亮的绿色,结果是252,它几乎是32位中最亮的绿色,但不完全是

要解决这个问题,您可以使用一个因子,如下所示:

Value32 = Value16 * 255 / Max16Value
其中Max16Value为31(红色和蓝色)或63(绿色)。例如:

Color.B = ((input >> 11) & 0x1F) * 255 / 31;

这样,输入中的红色31实际上会导致32位颜色中的红色255,这是两种情况下最亮的值

颜色对象包含ARGB中的颜色。A代表阿尔法,你现在不需要。其他是红色、绿色和蓝色的值。它们每个都是8位值。ARG和B一起构成32位颜色

16位的颜色一开始就很奇怪,因为红色和蓝色有5位,绿色有6位

要将它们转换为8位,可以对它们进行位移位(或相乘)

这是相当准确的。例如,对于绿色,一个6位数字,最高值(全部6位设置)是63。位集的下半部分,结果为7(最大值的1/9)。当你移动这两个位置转换成8位数字时,得到28,也就是255的1/9。如果你尝试其他几个例子,你会发现每个例子都非常接近。最大的舍入误差,你可以在光谱的末端找到。例如,63是16位中最亮的绿色,结果是252,它几乎是32位中最亮的绿色,但不完全是

要解决这个问题,您可以使用一个因子,如下所示:

Value32 = Value16 * 255 / Max16Value
其中Max16Value为31(红色和蓝色)或63(绿色)。例如:

Color.B = ((input >> 11) & 0x1F) * 255 / 31;

这样,输入中的红色31实际上会导致32位颜色中的红色255,这是两种情况下最亮的值

颜色对象包含ARGB中的颜色。A代表阿尔法,你现在不需要。其他是红色、绿色和蓝色的值。它们每个都是8位值。ARG和B一起构成32位颜色

16位的颜色一开始就很奇怪,因为红色和蓝色有5位,绿色有6位

要将它们转换为8位,可以对它们进行位移位(或相乘)

这是相当准确的。例如,对于绿色,一个6位数字,最高值(全部6位设置)是63。位集的下半部分,结果为7(最大值的1/9)。当你移动这两个位置转换成8位数字时,得到28,也就是255的1/9。如果你尝试其他几个例子,你会发现每个例子都非常接近。最大的舍入误差,你可以在光谱的末端找到。例如,63是16位中最亮的绿色,结果是252,它几乎是32位中最亮的绿色,但不完全是

要解决这个问题,您可以使用一个因子,如下所示:

Value32 = Value16 * 255 / Max16Value
其中Max16Value为31(红色和蓝色)或63(绿色)。例如:

Color.B = ((input >> 11) & 0x1F) * 255 / 31;

这样,输入中的红色31实际上会导致32位颜色中的红色255,这是两种情况下最亮的值

颜色对象包含ARGB中的颜色。A代表阿尔法,你现在不需要。其他是红色、绿色和蓝色的值。它们每个都是8位值。ARG和B一起构成32位颜色

16位的颜色一开始就很奇怪,因为红色和蓝色有5位,绿色有6位

要将它们转换为8位,可以对它们进行位移位(或相乘)

这是相当准确的。例如,对于绿色,一个6位数字,最高值(全部6位设置)是63。位集的下半部分,结果为7(最大值的1/9)。当你移动这两个位置转换成8位数字时,得到28,也就是255的1/9。如果你尝试其他几个例子,你会发现每个例子都非常接近。最大的舍入误差,你可以在光谱的末端找到。例如,63是16位中最亮的绿色,结果是252,