Some color convertors

By TheImrac on Jan 29, 2009

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
}

Comments

Sign in to comment.
BiSoN   -  Oct 18, 2012

hahahaha, here a coder great :D

 Respond  
ScorpionRAP   -  Jul 08, 2009

use ?!

 Respond  
PuNkTuReD   -  Jan 29, 2009

very interesting work here Thelmrac

 Respond  
Are you sure you want to unfollow this person?
Are you sure you want to delete this?
Click "Unsubscribe" to stop receiving notices pertaining to this post.
Click "Subscribe" to resume notices pertaining to this post.