5位RGB(0,31,0)转换为16位RGB(0,255,0)

3

我开始学习数据科学编程,发现绘制像素时颜色必须为RGB(0, 31, 0)。是否有办法将其更改为类似于RGB(0, 255, 0)的颜色?


2
https://dev59.com/LXE95IYBdhLWcg3wHqal - Josh Lee
2个回答

4
如果您有一个范围为0-255的绿色值

2
为什么需要 floor 函数?它们是整数。 - steabert
不要忘记,因为零是一个可接受的值,所以有256和32个离散级别,因此您应该乘以32和256,而不是31和255。您可以将转换仅涉及五个最高有效位。 - Dave
1
嗯,实际上我执行*31/255的原因是为了将先前的最大值除以并乘以新的最大值;这应该是正确的。(按相反顺序执行,以使整数算术更准确)。 - Bernd Elkemann
@Dave:这里有很多不同的值,但它们是值而不是索引。你确实想要乘以31并除以255。31代表DS的最大值,255是OP想要表示的值。你可以将其视为缩小到[0,1]范围,然后再放大回去。 - wnoise
是的,+1 eznme。经过思考,这是正确的做法,将黑色视为特殊情况,然后映射剩下的31个。 - Dave

3

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”。


不要忘记,因为零是一个可接受的值,所以有256和32个离散级别,因此您应该乘以256和32,而不是255和31。您可以将转换仅涉及五个最高有效位。 - Dave
1
@Dave:我不明白。 (0255)/31 = 0(正确),而且(31255)/31 = 255(也正确)。 - BlackBear
考虑到颜色映射,你的方法最为有效,因此对于你和eznme加1。我的理论涉及32个和256个离散级别(确实如此),因此每个级别将与下一个恰好相差8。但这意味着我的理论将丧失0的黑度,因此不是一个好的解决方案。 - Dave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接