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

问题描述 投票:16回答:5

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

rgb
5个回答
28
投票

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


6
投票

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

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

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

请参见数字表示。

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


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。


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


0
投票

鉴于现在每个Ocket都是由8位(二进制数字)组成的

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

1   0   1   0   0   1   0   1

对于每一位,你有两种可能性: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)
© www.soinside.com 2019 - 2024. All rights reserved.