Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 5位RGB(0,31,0)到16位RGB(0,255,0)_C_Rgb_Pixel_Nintendo Ds_Libnds - Fatal编程技术网

C 5位RGB(0,31,0)到16位RGB(0,255,0)

C 5位RGB(0,31,0)到16位RGB(0,255,0),c,rgb,pixel,nintendo-ds,libnds,C,Rgb,Pixel,Nintendo Ds,Libnds,所以我已经开始DS编程了,我注意到要画一个像素,颜色必须是RGB(0,31,0)。有没有办法将其更改为类似RGB(0,255,0)的格式?5位RGB:31=8位RGB:255 因此8位rgb=(5位rgb*255/31) 例如: 5 bit RGB = 12,3,21 8 bit R = (12 * 255) / 31 = 99 G = (3 * 255) / 31 = 25 B = (21 * 255) / 31 = 172 PS:我想你在标题中的意思是“5位RG

所以我已经开始DS编程了,我注意到要画一个像素,颜色必须是RGB(0,31,0)。有没有办法将其更改为类似RGB(0,255,0)的格式?

5位RGB:31=8位RGB:255

因此
8位rgb=(5位rgb*255/31)

例如:

5 bit RGB = 12,3,21

8 bit R = (12 * 255) / 31 = 99
      G = (3 * 255) / 31  = 25
      B = (21 * 255) / 31 = 172

PS:我想你在标题中的意思是“5位RGB到8位RGB”。

如果你有一个范围为0-255的绿色值
g
,你可以使用
g*31/255
将其转换为任天堂的0-31范围。如果你问我们你是否真的可以做些什么,让任天堂的每个频道显示0-255的范围,答案是否定的,但你可以使用抖动(搜索引擎it)。

你为什么需要地板?它们是整数别忘了,因为零是一个可接受的值,所以有256和32个离散级别,所以你应该乘以32和256,而不是31和255。你可以认为转换只涉及五个最高有效位。嗯,实际上我做*31/255的原因是,我除以先前的最大值,然后乘以新的最大值;这应该是正确的。(以相反的顺序,以便整数运算保持更精确)。@Dave:有那么多不同的值,但这些值不是索引。你真的想乘以31,再除以255。31表示DS的最大值,255是OP希望表示的方式。你可以把它想象成缩小到[0,1]的范围,然后再备份。是的,+1 eznme。仔细考虑后,这是正确的做法,将黑色视为特例,然后映射剩余的31。不要忘记,因为零是一个可接受的值,有256和32个离散级别,所以应该乘以256和32,而不是255和31。你可以认为转换只涉及五个最高有效位。@Dave:我不明白。(0*255)/31=0(正确)和(31*255)/31=255(也正确)考虑到这一点,您的方式最适用于颜色映射,因此+1适用于您和eznme。我的理论涉及32和256个离散级别(确实存在),因此每个级别与下一个级别的距离正好是8。但这意味着我的理论将失去0的黑色,因此不是一个好的解决方案。