
我有一个颜色列表,以上是一部分RGB值
随机给定一个颜色查找最接近的颜色
大概200多种RGB值的颜色列表
我的思路是把RGB列表转乘HSV列表
在用欧式距离法得到最接近的HSV所在的INDEX而后返回INDEX处颜色
不知道这个类应该如何写
比如我随机给个RGB(255,14,100)如何返回HSB空间最接近色
Function get接近色(ByVal col As color, ByVal col_list As color())as color
............
end Function
分数不多,大伙帮帮老弟吧,谢谢了。
以下JAVA参考连接
http://www.iteye.com/problems/23525
以下空间转换
'RGB TO HSB
Function rgbTohsb(ByVal col As Color) As Single()
Dim rgbR As Single = col.R, rgbG As Single = col.G, rgbB As Single = col.B
Dim rgb() As Single = New Single() {rgbR, rgbG, rgbB}
Array.Sort(rgb)
Dim max As Single = rgb(2)
Dim min As Single = rgb(0)
Dim hsbH As Single = 0
Dim hsbS As Single
Dim hsbB As Single
If max = min Then
hsbH = 270
hsbS = 0
hsbB = 0
GoTo ret
End If
hsbB = max
Select Case max
Case 0
hsbS = 0
Case Else
hsbS = CSng((max - min) / max)
End Select
Dim mc As Single = (max - min)
Dim a As Single = rgbB - rgbR
If max = rgbR And rgbG >= rgbB Then
hsbH = (rgbG - rgbB) * 60.0F / mc + 0
ElseIf max = rgbR And rgbG < rgbB Then
hsbH = (rgbG - rgbB) * 60.0F / mc + 360
ElseIf max = rgbG Then
hsbH = (rgbB - rgbR) * 60.0F / mc + 120
ElseIf max = rgbB Then
hsbH = (rgbR - rgbG) * 60.0F / mc + 240
End If
ret: Return New Single() {hsbH, hsbS, hsbB}
End Function
'颜色模型转换
''' <summary>
''' HSV转颜色,H范围0-360,S范围0-1,V范围0-255
''' </summary>
''' <param name="H"></param>
''' <param name="S"></param>
''' <param name="V"></param>
''' <returns></returns>
''' <remarks></remarks>
Function hsbTOrgb(ByVal H As Single, ByVal S As Single, ByVal V As Single) As Color
Dim r, g, b As Integer
If S = 0 Then
r = g = b = V
Else
H /= 60
Dim i As Byte = Int(H)
Dim f As Single = H - i
Dim p As Single = V * (1 - S)
Dim q As Single = V * (1 - f * S)