通常使用浮点数(而不是字节)来表示HSV / HSB / HSL模型。大多数描述将色相描述为圆锥体中的“角度”,因此将其视为实数是有意义的。
但是,这与224总颜色的现实限制有何关系?有多少个不同的色相可用?此外,我认为该数字应取决于其他参数-例如饱和度..
在HSV中,色调被定义为
H = atan2( sqrt(3)*(G-B), 2R-G-B )
(链接)。在六个扇区(R-Y,Y-G...)中,每个扇区有相同数量的色调。此外,在区域之间有六种颜色。因此,6 + 6 * huesRY
。
在红黄色扇区中,R > G > B,因此atan2的两个参数都是正数。
count sqrt(3) * (G-B) / (2R-G-B)
=count (G-B) / (2R-G-B)
=count (G-B) / ((G-B) + (2R-2G))
由于我们可以对 [x,y] 的集合应用任何线性变换而不改变其比率的计数,因此 x /(x + 2y)== x / y
=count (G-B) / (R-G)
如果我们从所有的R、G、B中减去相同的值,比率不会改变,因此假设B=0
=count G / (R-G)
=count G / R
因此,假设每个通道有8位(即8个比特),则色调的数量是两个小于2^8的正整数之间的比率的六倍,再加上六个。与互质的正整数对一样多的比率。小于n
且与n
互质的正整数的数量称为欧拉函数。OEIS lists its partial sums。在256以下的正整数中,恰好有19948对互质的正整数。
6 * 19948 + 6 = 119 694
在HSV模型中,恰好有119694种不同的色调与8位RGB模型中的颜色相对应。请注意,它们的间距不均匀。
如果在HSV模型中每个通道使用8位,那么与每个通道使用8位的RGB模型相比,颜色数量会更少,因为一些HSV三元组映射到相同的颜色,而每个RGB三元组定义了不同的颜色。sqrt(3)(x)
不是一个合理的符号表示。如果你的意思是立方根,请写成 root(3)(x)
或者 x<sup>1/3</sup>
。 - PointedEars在RGB颜色中,色调可以从(2 ^ 3 * 深度 - 2 ^ 深度 / 亮度)/ 3计算得出,因此15位颜色具有341个不同的色调
24位颜色共有21845种不同的色调
如果有119000个色调,则其余所有色调-红色色调的红色色调将为256,X,Y约为2 ^ 16,这意味着绿色和蓝色的色调比红色少?
RGB<0,128,255> 是一种命名颜色,Azure,色相为210度。
对于 RGB<0,n,128>,n 只能是 0 或 255 才能成为独特的色调, 这将是海军蓝或春绿色之一。
RGB<0,64,128> 是 Azure 的一种色调,仍然是 210 度。它不是一个独特的色调。
对于 RGB<0,n,245>,同样地,n 只能是 0 或 255, 这将是 240 度的蓝色或 177.65 度的青色。
浮点数被引入作为 HSL 和 RGB 之间的区别(RGB 必须是字节值整数)。 我对原帖的回答是独特 RGB 色调的计数,非常专注,没有未经证实的内容。
我的循环顺序并不是随意的;它会加载一个包含1530个全光谱独特色调的数组。 用C++或C#编写代码,然后循环,从屏幕顶部到底部绘制一条线,你将看到所有独特色调的完整光谱。 我本想上传一张位图,但由于权限问题一直被拒绝,而且它可能需要作为分形化的jpg格式,这会破坏这个想法。RGB(256,256,256)中有1,530种色调,这很简单。 这有效地展示了RGB的“分辨率”,因为要成为不同的色调之一,rgb中的一个必须是255,另一个必须是0,第三个必须通过256个值递增,极端情况下减少重复。其他所有颜色都是色调、色调或阴影。因此,让我们在0和255的六种组合中将它们加起来,并在进行计数时将它们标记为I:
Dim I As Integer
Dim R, G, B As Byte
Dim Spectrum(0 to 1529) as Long
I = -1 'Incremented before each use
R = 255: B = 0 'G inc RED
For G = 0 To 255 '256
I = I + 1: Spectrum(I) = RGB(R, G, B)
Next
G = 255: B = 0 'R dec YELLOW
For R = 254 To 0 Step -1 '255
I = I + 1: Spectrum(I) = RGB(R, G, B)
Next
R = 0: G = 255 'B inc GREEN
For B = 1 To 255 '255
I = I + 1: Spectrum(I) = RGB(R, G, B)
Next
R = 0: B = 255 'G dec CYAN
For G = 254 To 0 Step -1 '255
I = I + 1: Spectrum(I) = RGB(R, G, B)
Next
G = 0: B = 255 'R inc BLUE
For R = 1 To 255 '255
I = I + 1: Spectrum(I) = RGB(R, G, B)
Next
R = 255: G = 0 'B dec MAGENTA
For B = 254 To 1 Step -1 '254
I = I + 1: Spectrum(I) = RGB(R, G, B)
Next
'I = 1,529 = 256+255+255+255+255+254 No duplicates
'Hue = I * 0.23529411764705882353°
'0° is Red at I = 0, so I=0 counts as 1 so, 1 + 1,529 = 1530
0、n、255
并不能定义三角形中 0、0、0
、0、0、255
和 0、255、255
的最大色调数量。考虑 0、128、255
。在 0、n、128
这个色度上,n 是 64.5。因此,在集合 0、n、255
中的色调与集合 0、n、245
及以下的色调是不同的——请注意,我甚至没有涉及到一些关于颜色感知的心理物理方面。另外,OP明确指出要使用FLOAT,这种情况下,本答案的论点进一步无效。 - Myndex