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