News:

PlayBASIC2DLL V0.99 Revision I Commercial Edition released! - Convert PlayBASIC programs to super fast Machine Code. 

Main Menu

RGB to HSL

Started by Alex777, March 15, 2006, 06:07:07 AM

Previous topic - Next topic

Alex777

This routine converts an RGB value to an HSL value (making the colour easier to visualize) and gives the new MaxVal & MinVal statements a workout.

PlayBASIC Code: [Select]
; ----------------------------------
; convert RGB to HSL
; ----------------------------------

Local r = 235
Local g = 236
Local b = 241
Local RGBValue = RGB(r, g, b)

Cls RGB(255, 255, 255)
BoxC 50, 50, 150, 150, 1, RGBValue

H, S, L = RGB2HSL(RGBValue)

Ink RGB(8, 8, 8)
Text 0, 0, "RGB = " + Str$(r) + "/" + Str$(g) + "/" + Str$(b)
Text 0, 20, "HSL = " + Str$(H) + "/" + Str$(S) + "/" + Str$(L)
Sync
WaitKey

; ------------------------------------------------------------------------------

Psub RGB2HSL(RGBValue)
RemStart
convert RGBValue to HSL value
NOTE: there are different conventions for expressing the Hue value; this
routine follows the Paint Shop Pro method. Also, the Hue values are slightly
inaccurate.
RemEnd


Local r, g, b, r#, g#, b#, max, min, max#, min#

r = RgbR(RGBValue)
g = RgbG(RGBValue)
b = RgbB(RGBValue)

r# = RgbR(RGBValue) / Float(255)
g# = RgbG(RGBValue) / Float(255)
b# = RgbB(RGBValue) / Float(255)

max# = MaxVal#(r#, g#)
max = MaxVal(r, g)
max# = MaxVal#(max#, b#)
max = MaxVal(max, b)
min# = MinVal#(r#, g#)
min = MinVal(r, g)
min# = MinVal#(min#, b#)
min = MinVal(min, b)

L = (max + min) / 2

If L <= 128
S# = (max# - min#) / (max# + min#)
Else
S# = (max# - min#) / (2 - (max# + min#))
EndIf

S = S# * 256

If max = b
H = 60 * ((r# - g#) / (max# - min#)) + 170
ElseIf max = g
H = 60 * ((b# - r#) / (max# - min#)) + 85
Else
; max = r
H = 60 * ((g# - b#) / (max# - min#))
EndIf

EndPsub H, S, L

; =============================================================================