Working on some color convectors for a color picker possible, for an example try /xyz and /zyx. xyz may take a while ( I am looking into making is more efficent )
alias HSL_RGB {
var %h = $1, %s = $2, %L = $3, %r, %g, %b
If ($2 == 0) {
%r = %l
%g = %l
%b = %l
}
Else {
var %tmp2
If (%L < .5) %tmp2 = $calc(%L * (1 + %s))
ElseIf (%L >= .5) %tmp2 = $calc((%L + %S) - (%L * %S))
echo -b 2: %tmp2
var %tmp1 = $calc(2 * %L - %tmp2)
echo -b 4: %tmp1
%h = $calc(%h / 360)
var %Rtmp3 = $iif($calc(%H + 1/3) < 0, $calc($v1 + 1), $v1)
var %Gtmp3 = $iif(%H < 0, $calc($v1 + 1), $v1)
var %Btmp3 = $iif($calc(%H - 1/3) < 0, $calc($v1 + 1), $v1)
echo -b 5: %rtmp3 %gtmp3 %btmp3
var %RGBtmp3 = %Rtmp3 %Gtmp3 %Btmp3, %x = 1,
while (%x <= 3) {
var %y = $gettok(%RGBtmp3,%x,32), %z
If ($calc(6 * %y) < 1) %z = $calc(%tmp1 + (%tmp2 - %tmp1) * 6 * %y)
ElseIf ($calc(2 * %y) < 1) %z = %tmp2
ElseIf ($calc(3 * %y) < 2) %z = $calc(%tmp1 + (%tmp2 - %tmp1) * ((2/3) - %y) * 6)
[ % $+ [ $replace(%x,1,r,2,g,3,b) ] ] = $round($calc(255 * %z),0)
inc %x
}
}
return %r %g %b
}
alias HSV_RGB {
var %h = $1, %s = $2, %V = $3, %r, %g, %b
If (%v == 0) { return $rgb(0,0,0) }
ElseIf (%s == 0) { return $rgb(%v,%v,%v) }
Else {
var %hf = $calc(%h / 60), %i = $floor(%hf), %f = $calc(%hf - %i)
var %pv = $calc(%V * (1 - %S))
var %qv = $calc(%V * (1 - %s * %f))
var %tv = $calc(%v * (1 - %s * (1 - %f)))
If (%i == 0) var %r = %v, %g = %tv, %b = %pv
ElseIf (%i == 1) var %r = %qv, %g = %v, %b = %pv
ElseIf (%i == 2) var %r = %pv, %g = %v, %b = %tv
ElseIf (%i == 3) var %r = %pv, %g = %qv, %b = %v
ElseIf (%i == 4) var %r = %tv, %g = %pv, %b = %v
ElseIf (%i == 5) var %r = %v, %g = %pv, %b = %qv
ElseIf (%i == 6) var %r = %v, %g = %tv, %b = %pv
ElseIf (%i == -1) var %r = %v, %g = %pv, %b = %qv
return $rgb($floor($calc(%r * 255)),$floor($calc(%g * 255)),$floor($calc(%b * 255)))
}
}
alias zyx {
window -aBp +dL @zz -1 -1 20 360 | var %x = 0
while (%x <= 360) { drawline -nr @zz $HSV_RGB(%x,1,1) 1 0 %x 20 %x | inc %x }
drawline @zz
}
alias xyz {
window -aBp +dL @zz -1 -1 150 150 | var %x = 150, %y = 150
while (%x >= 0) {
while (%y >= 0) {
var %z = $HSV_RGB(0,$calc(%x / 150),$calc((150 - %y) / 150))
drawdot -nr @zz %z 1 %x %y
dec %y
}
var %y = 150
dec %x
}
drawdot @zz
}