Hey ghost dancer, thanks man, it's exactly what I need. Now only if I could get it working ;). I'm not too sharp on BlitzPlus (never used it), but I tried to convert it to bmax anyway. It runs but gives a weird problem, noted in my comments in the first few lines.
I think I'm either calling your functions incorrectly, or I misunderstood something about the temp pointer in rgb2hsv(). I'm still trying to learn about pointers, so it's pretty exotic for me :p
Can you see what I did wrong you think?
Strict
Local myrgb = rgb(100,150,200)
Print "Red color of 'rgb' should be 100, it is: "+getred(myrgb) 'prints out: 255
Local myhsv:hsv = New hsv
myhsv = rgb2hsv(myrgb,myhsv)
Print "HSV values from myrgb: "+myhsv.h+" "+myhsv.s+" "+myhsv.v 'prints out: -1.#IND0000 0.000000000 1.00000000
Local newrgb = hsv2rgb(myhsv.h,myhsv.s,myhsv.v)
Print "myrgb converted to hsv, and back to rgb: "+newrgb 'prints out: 16777215
'-----------begin ghost dancer's code, converted to bmax-------------------
'create a custom Type For HSV colour
Type hsv
Field h#, s#, v#
End Type
'-------------------------------------------------------------------
Function getRed(rgb)
'-------------------------------------------------------------------
'Get red component of RGB colour value
'
'Parameters:
'rgb - RGB value that you want the red component from
'
'Return value:
'red value (0 To 255)
'-------------------------------------------------------------------
rgb = rgb Shr 16 And $ff
Return rgb' Shr 16 And $ff
End Function
'-------------------------------------------------------------------
Function getGreen(rgb)
'-------------------------------------------------------------------
'Get green component of RGB colour value
'
'Parameters:
'rgb - RGB value that you want the green component from
'
';Return value:
'green value (0 To 255)
'-------------------------------------------------------------------
Return (rgb Shr 8) And $ff
End Function
'-------------------------------------------------------------------
Function getBlue(rgb)
'-------------------------------------------------------------------
'Get blue component of rgb colour value
'
'Parameters:
'rgb - RGB value that you want the blue component from
'
'Return value:
'blue value (0 To 255)
'-------------------------------------------------------------------
Return rgb And $ff
End Function
'-------------------------------------------------------------------
Function rgb(r, g, b)
'-------------------------------------------------------------------
'Convert R,G,B components To single RGB value
'
'Parameters:
'r - red value
'g - green value
'b - blue value
'
'Return value:
'rgb value
'-------------------------------------------------------------------
Return (r Shl 16) + (g Shl 8) + b
End Function
'-------------------------------------------------------------------
Function rgb2hsv:hsv(rgb, temphsv:hsv)
'-------------------------------------------------------------------
'Convert RGB To HSV
'
'Parameters:
'rgb - RGB value that you want convert
'temphsv.hsv - Added in V2.01, it is required To prevent the
' memory leakage problem. This needs To be the same
' hsv Type pointer that the Function returns to.
' e.g. myhsv.hsv = New hsv
' myhsv = rgb2hsv($ff0000, myhsv)
'
'Return value:
'custom hsv Type defined in this library
'-------------------------------------------------------------------
' ;RGB components in range 0 To 1
Local r# = getRed(rgb) / 255.0
Local g# = getGreen(rgb) / 255.0
Local b# = getBlue(rgb) / 255.0
' ;Min value
Local minVal#
If r < g Then minVal# = r Else minVal# = g
If b < minVal Then minVal = b
' ;Max value
Local maxVal#
If r > g Then maxVal# = r Else maxVal# = g
If b > maxVal Then maxVal = b
' ;calculate difference
Local diff# = maxVal - minVal
temphsv.v = maxVal
If maxVal = 0 Then
temphsv.s = 0
temphsv.h = -1 ';h is undefined
Else
temphsv.s = diff / maxVal
If r = maxVal Then
temphsv.h = (g - b) / diff
ElseIf g = maxVal Then
temphsv.h = 2 + (b - r) / diff
Else
temphsv.h = 4 + (r - g) / diff
EndIf
temphsv.h = temphsv.h * 60
If temphsv.h < 0 Then temphsv.h = temphsv.h + 360
EndIf
Return temphsv
End Function
';-------------------------------------------------------------------
Function hsv2rgb(h#, s#, v#)
'-------------------------------------------------------------------
'Convert HSV To RGB
'
'Parameters:
'h# - hue (in degrees, 0 To 350)
's# - saturation (0.0 To 1.0)
'v# - value (brightness, 0.0 To 1.0)
'
'Return value:
'rgb value
'-------------------------------------------------------------------
Local r#,g#,b#,f#,p#,q#,t#,i#
If s = 0 Then
' ;saturation of 0 = grey
r# = v ; g# = v ; b# = v
Else
h = h / 60
i = Floor(h)
f# = h - i
p# = v * (1 - s)
q# = v * (1 - s * f)
t# = v * (1 - s * (1 - f))
Select i
Case 0
r# = v
g# = t
b# = p
Case 1
r# = q
g# = v
b# = p
Case 2
r# = p
g# = v
b# = t
Case 3
r# = p
g# = q
b# = v
Case 4
r# = t
g# = p
b# = v
Default
r# = v
g# = p
b# = q
End Select
EndIf
r = r * 255
g = g * 255
b = b * 255
Return rgb(r, g, b)
End Function