HSLToRGB201 |
Public Function HSLToRGB201( _
ByVal Hue As Long, _
ByVal Saturation As Long, _
ByVal Luminance As Long, _
Optional Validate As Boolean _
) As Long
' by Donald, donald@xbeat.net, 20011126
' after seeing Thomas Kabir's code (contact@vbfrood.de, http://www.vbfrood.de)
Dim rR As Single, rG As Single, rB As Single
Dim rH As Single, rL As Single, rS As Single
Dim rMin As Single, rMax As Single, rDiff As Single
If Validate Then ValidateHSL Hue, Saturation, Luminance
If Saturation = 0 Then
' CLng(CSng(...)) else 127.5 -> 127
HSLToRGB201 = CLng(CSng(2.55 * Luminance)) * &H10101
Else
rH = Hue / 60: rS = Saturation / 100: rL = Luminance / 100
If rL <= 0.5 Then
rMin = rL * (1 - rS)
Else
rMin = rL - rS * (1 - rL)
End If
rMax = 2 * rL - rMin
rDiff = rMax - rMin
Select Case Hue \ 60
Case 0
rR = rMax
rB = rMin
rG = rH * rDiff + rMin
Case 1
rG = rMax
rB = rMin
rR = rMin - (rH - 2) * rDiff
Case 2
rG = rMax
rR = rMin
rB = (rH - 2) * rDiff + rMin
Case 3
rB = rMax
rR = rMin
rG = rMin - (rH - 4) * rDiff
Case 4
rB = rMax
rG = rMin
rR = (rH - 4) * rDiff + rMin
Case Else
rR = rMax
rG = rMin
rB = rMin - (rH - 6) * rDiff
End Select
HSLToRGB201 = CLng(rB * 255) * &H10000 + CLng(rG * 255) * &H100 + CLng(rR * 255)
End If
End Function
|