Here are 2 functions I've converted from the archives:
Rem
HSB2RGB
RGB2HSB
coverted from jfk EO-11110's code archive entry
under Algorithms
EndRem
' ==========================================
' example
Local h!,s!,l! , rgb%
h=122 ; s=0.8 ; l=0.24
rgb=HSB2RGB(h,s,l)
Print "Hue="+h+" Sat="+s+" lum="+l
Print "RGB="+rgb
RGB2HSB rgb , h,s,l
Print "Hue="+h+" Sat="+s+" lum="+l
' ==========================================
Rem
hue(0 to 360)
saturation (0 to 1.0)
luminance (0 to 1.0)
EndRem
Function HSB2RGB(h!,s!,l!)
Local i%,f!,p!,q!,t!,r!,g!,b!
If s=0
r=l*255.0 ; g=l*255.0 ; b=l*255.0
Else
h=h/60.0 ; I=Floor(H) ; f=h-I
p=l*(1.0-s)
q=l*(1.0-s*f)
t=l*(1.0-s*(1.0-f))
Select i
Case 0 ; r=l ; g=t ; b=p
Case 1 ; r=q ; g=l ; b=p
Case 2 ; r=p ; g=l ; b=t
Case 3 ; r=p ; b=l ; g=q
Case 4 ; r=t ; b=l ; g=p
Default ; r=l ; g=p ; b=q
End Select
r:*255 ; g:*255 ; b:*255
EndIf
If r<0 r=0
If r>255 r=255
If g<0 g=0
If g>255 g=255
If b<0 b=0
If b>255 b=255
Return (Int(r) Shl 16) | (Int(g) Shl 8) | Int(b)
End Function
Rem
takes 24 bit rgb color and passes results to
hue(0 to 360)
saturation(0 to 1.0)
luminance(0 To 1.0)
EndRem
Function RGB2HSB(rgb, hue! Var,sat! Var,lumin! Var)
rgb=rgb & $FFFFFF
Local r!=(rgb Shr 16) & $FF
Local g!=(rgb Shr 8) & $FF
Local b!=rgb & $FF
Local my_min!=Min(r,g)
Local my_max!=Max(r,g)
my_min!=Min(my_min!,b)
my_max!=Max(my_max!,b)
Local delta!=(my_max!-my_min!)
If my_max!<>0
sat!=delta!/my_max!
lumin!=my_max!/255.0
If delta<>0
If r=my_max
hue=(g-b)/delta
ElseIf g=my_max
hue=2+((b-r)/delta)
Else
hue=4+((r-g)/delta)
EndIf
EndIf
EndIf
hue:*60.0
If hue<0 hue:+360.0
End Function