'Option Explicit
Function Max(aa As Integer, bb As Integer, cc As Integer) As Integer
If aa >= bb Then Max = aa Else Max = bb
If Max <= cc Then Max = cc
End Function
Function Min(aa As Integer, bb As Integer, cc As Integer) As Integer
If aa <= bb Then Min = aa Else Min = bb
If Min >= cc Then Min = cc
End Function
Private Sub Command1_Click()
Dim R As Integer
Dim G As Integer
Dim B As Integer
R = 74
G = 81
B = 180
MaxValue = Max(R, G, B)
MinValue = Min(R, G, B)
If R = MaxValue Then H = (G - B) / (MaxValue - MinValue) * 60
If G = MaxValue Then H = 120 + (B - R) / (MaxValue - MinValue) * 60
If B = MaxValue Then H = 240 + (R - G) / (MaxValue - MinValue) * 60
If H < 0 Then H = H + 360
S = (MaxValue - MinValue) / MaxValue
V = Max(R, G, B)
Text1 = R
Text2 = G
Text3 = B
Text4 = H
Text5 = S
Text6 = V
Picture1.BackColor = RGB(R, G, B)
End Sub
-----------------------------------------------------------------------------------------------------
RGB(74,81,180)转换为HSV的结果:
我的代码算出的是: H=236 S=0.58 V=180
那网上给的是:H=118 S=150 V=180
-----------------------------------------------------------------------------------------------------
网上结果截图为:

为什么H的结果不一样,网上的结果s为什么是150,根据hsv的定义s应该是0----1的呀。
根据hsv的定义v应该是0----1的呀,为什么二者计算出来都是180.。
附: 我采用的公式来源:
=================================================
HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。
这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)。
HSV颜色空间模型
HSV颜色空间模型[1]
色调H:用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
饱和度S:取值范围为0.0~1.0;
亮度V:取值范围为0.0(黑色)~1.0(白色)。
RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Saturation Value)颜色模型是面向用户的。
HSV模型的三维表示从RGB立方体演化而来。设想从RGB沿立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿垂直轴测量。
HSV六棱锥
H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰
HSV颜色空间模型
HSV颜色空间模型[2]
度。相隔120度。互补色分别相差180度。
V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。
RGB转化到HSV的算法
max=max(R,G,B):
min=min(R,G,B)
V=max(R,G,B)
S=(max-min)/max:
ifR = max,H =(G-B)/(max-min)* 60
ifG = max,H = 120+(B-R)/(max-min)* 60
ifB = max,H = 240 +(R-G)/(max-min)* 60
ifH < 0,H = H+ 360
==============================================================================
请研究过hsv的给说说。先谢谢了。
Function Max(aa As Integer, bb As Integer, cc As Integer) As Integer
If aa >= bb Then Max = aa Else Max = bb
If Max <= cc Then Max = cc
End Function
Function Min(aa As Integer, bb As Integer, cc As Integer) As Integer
If aa <= bb Then Min = aa Else Min = bb
If Min >= cc Then Min = cc
End Function
Private Sub Command1_Click()
Dim R As Integer
Dim G As Integer
Dim B As Integer
R = 74
G = 81
B = 180
MaxValue = Max(R, G, B)
MinValue = Min(R, G, B)
If R = MaxValue Then H = (G - B) / (MaxValue - MinValue) * 60
If G = MaxValue Then H = 120 + (B - R) / (MaxValue - MinValue) * 60
If B = MaxValue Then H = 240 + (R - G) / (MaxValue - MinValue) * 60
If H < 0 Then H = H + 360
S = (MaxValue - MinValue) / MaxValue
V = Max(R, G, B)
Text1 = R
Text2 = G
Text3 = B
Text4 = H
Text5 = S
Text6 = V
Picture1.BackColor = RGB(R, G, B)
End Sub
-----------------------------------------------------------------------------------------------------
RGB(74,81,180)转换为HSV的结果:
我的代码算出的是: H=236 S=0.58 V=180
那网上给的是:H=118 S=150 V=180
-----------------------------------------------------------------------------------------------------
网上结果截图为:

为什么H的结果不一样,网上的结果s为什么是150,根据hsv的定义s应该是0----1的呀。
根据hsv的定义v应该是0----1的呀,为什么二者计算出来都是180.。
附: 我采用的公式来源:
=================================================
HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。
这个模型中颜色的参数分别是:色调(H),饱和度(S),亮度(V)。
HSV颜色空间模型
HSV颜色空间模型[1]
色调H:用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
饱和度S:取值范围为0.0~1.0;
亮度V:取值范围为0.0(黑色)~1.0(白色)。
RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Saturation Value)颜色模型是面向用户的。
HSV模型的三维表示从RGB立方体演化而来。设想从RGB沿立方体对角线的白色顶点向黑色顶点观察,就可以看到立方体的六边形外形。六边形边界表示色彩,水平轴表示纯度,明度沿垂直轴测量。
HSV六棱锥
H参数表示色彩信息,即所处的光谱颜色的位置。该参数用一角度量来表示,红、绿、蓝分别纯度S为一比例值,范围从0到1,它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S=0时,只有灰
HSV颜色空间模型
HSV颜色空间模型[2]
度。相隔120度。互补色分别相差180度。
V表示色彩的明亮程度,范围从0到1。有一点要注意:它和光强度之间并没有直接的联系。
RGB转化到HSV的算法
max=max(R,G,B):
min=min(R,G,B)
V=max(R,G,B)
S=(max-min)/max:
ifR = max,H =(G-B)/(max-min)* 60
ifG = max,H = 120+(B-R)/(max-min)* 60
ifB = max,H = 240 +(R-G)/(max-min)* 60
ifH < 0,H = H+ 360
==============================================================================
请研究过hsv的给说说。先谢谢了。
