为什么我们总是将RGB值除以255?

时间:2013-12-10 05:16:32

标签: rgb

为什么我们总是将RGB值除以255?我知道范围是[0-1]。但为什么只有255?任何人都可以向我解释RGB值的概念吗?

6 个答案:

答案 0 :(得分:24)

RGB(红色,绿色,蓝色)各8位 每种颜色的范围是0-255(因为2 ^ 8 = 256种可能性) 组合范围为256 * 256 * 256。

除以255,可以用0.0-1.0范围描述0-255范围,其中0.0表示0(0x00),1.0表示255(0xFF)。

答案 1 :(得分:5)

这是一个普遍的问题,因为它可以特定于平台甚至是方法。它真正归结为数学并获得0-1之间的值。由于255是最大值,因此除以255表示0-1表示。

每个通道(红色,绿色和蓝色均为每个通道)为8位,因此每个通道限制为256,在这种情况下为255,因为包含0。如参考文献所示,当使用浮点值时,系统通常使用0到1之间的值。

http://en.wikipedia.org/wiki/RGB_color_model

请参阅数字表示。

  

这些范围可以通过几种不同的方式量化:从0到1,   中间有任何小数值。此表示用于   理论分析,以及使用浮点的系统   表示。每个颜色分量值也可以写为a   百分比,从0%到100%。在计算机中,组件值是   通常存储为0到255范围内的整数,即范围   一个8位字节可以提供。这些通常表示为   十进制或十六进制数。高端数字图像设备   通常能够处理每种原色的较大整数范围,   例如0..1023(10位),0..65535(16位)或更大,通过   将24位(三个8位值)扩展为32位,48位或   64位单位(或多或少独立于特定计算机   字号)。

答案 2 :(得分:3)

RGB值从0上升到255,因为它只占用一个字节的数据。一个字节等于8位,每个位表示0或1.这使得8位二进制中的0:00000000和255 11111111.最后一位表示值中是否为1。第二个最后说如果值中有2。第三个句子说如果值中有4个,那么每次都加倍。如果将所有存在的小值相加,则得到总值。例如,

    =10110101
    =1*128 + 0*64 + 1*32 + 1*16 + 0*8 + 1*4 + 0*2 + 1*1
    =128 + 32 + 16 + 4 + 1
    =181

这意味着二进制10110101以十进制形式等于181。

答案 3 :(得分:1)

RGB值通常存储为整数以节省内存。但是,对颜色进行数学运算通常是在浮点数中完成的,因为它更容易,更强大,更精确。将浮点数转换为整数的行为称为“量化”,它会抛弃精度。

通常,RGB值被编码为8位整数,范围从0到255.将0.0f视为黑色,将1.0f视为白色(最大亮度)是行业标准。要将[0,255]转换为[0.0f,1.0f],您所要做的就是除以255.0f。

如果你在意,这是转换回整数:( int)floor(x * 255.0f + 0.5f)的公式。但如果需要,首先将x钳位到[0.0f,1.0f]。

答案 4 :(得分:0)

鉴于每个Ocket现在由8位组成( bi nary digi t

假设我们有一个像这样填充的Ocket:

1   0   1   0   0   1   0   1

每个位你得到2种可能性:0或1

2 x 2 x 2 x 2 x 2 x 2 x 2 x 2    = 2^8 = 256
总共:256

And for hexadecimal colors :
given that you have 3 couples of characters, dash excluded => ex: #00ff00
0, 1, 2, 3, 4 , 5, 6, 7, 8, 9, a, b, c, d, e, f = 16 possibilities 

16 x 16 = 256

R      V     B   = color
256  x 256 x 256 = 16 777 216 colors)

答案 5 :(得分:0)

它使矢量操作更简单...想象一下,您有图像,并且想要将其颜色更改为红色。使用向量,您可以将每个像素乘以(1.0,0.0,0.0)

P * (1.0, 0.0, 0.0)

否则,它只会添加不必要的步骤(在本例中为255)

P * (255, 0, 0) / 255

并想象使用更复杂的过滤器,不必要的步骤会堆积起来……