Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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
Math 字数学解释中位组的十进制值_Math_Rgb_Bit_16 Bit - Fatal编程技术网

Math 字数学解释中位组的十进制值

Math 字数学解释中位组的十进制值,math,rgb,bit,16-bit,Math,Rgb,Bit,16 Bit,如何获取R/G/B值 11111 111111 11111 > 16 bit R G B 对此有一个简单的解释吗?为什么要将十进制值除以其他位以得到单个组值?如果要得到R,必须向右移动11位,以便G和B消失。所以 R=x>>11 但是每一个1位的移位相当于除以2,所以上面的表达式相当于 R = x/2048 (2048 are the 6+5 G+B 11 bit) G = x-R*2048/32 (32 are the B ) 所以你得到了R 要得到G,根据

如何获取R/G/B值

11111 111111 11111  > 16 bit
  R      G     B

对此有一个简单的解释吗?为什么要将十进制值除以其他位以得到单个组值?

如果要得到R,必须向右移动11位,以便G和B消失。所以

R=x>>11

但是每一个1位的移位相当于除以2,所以上面的表达式相当于

R = x/2048 (2048 are the 6+5 G+B  11 bit)
G = x-R*2048/32 (32 are the B )
所以你得到了R

要得到G,根据公式,你可以先去掉R,这是你之前得到的R,但向后移动11位(或乘以2048)。现在,完成此操作后,您将获得如下数字:

R=X/(2^11)=x/2048
将5位向左移位(或除以32位),得到结果

请注意,在实践中,您可以更轻松地执行以下操作:

111111 11111

你可以把它看作是掩码和移位注意你的操作符优先级:你的
G
计算在我所知道的每种编程语言中都是错误的(…除了Postscript,但那只是因为它是一种后缀语言,所以你不可能犯同样的错误).最好是最后一个
和0x3F
——你不知道它在哪里。
B=(x and 0x1F)
G=((x>>5) and 0x3F)
R=((x>>11) and 0x1F)