Author: Frederic Bonnet
Converts a color in HLS to a RGB triple. The triple can be processed by "dec2rgb" (See recipe "Color Manipulation").
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | proc hls2rgb {h l s} {
# Posted by frederic.bonnet@ciril.fr
# h, l and s are floats between 0.0 and 1.0, ditto for r, g and b
# h = 0 => red
# h = 1/3 => green
# h = 2/3 => blue
set h6 [expr {($h-floor($h))*6}]
set r [expr { $h6 <= 3 ? 2-$h6
: $h6-4}]
set g [expr { $h6 <= 2 ? $h6
: $h6 <= 5 ? 4-$h6
: $h6-6}]
set b [expr { $h6 <= 1 ? -$h6
: $h6 <= 4 ? $h6-2
: 6-$h6}]
set r [expr {$r < 0.0 ? 0.0 : $r > 1.0 ? 1.0 : double($r)}]
set g [expr {$g < 0.0 ? 0.0 : $g > 1.0 ? 1.0 : double($g)}]
set b [expr {$b < 0.0 ? 0.0 : $b > 1.0 ? 1.0 : double($b)}]
set r [expr {(($r-1)*$s+1)*$l}]
set g [expr {(($g-1)*$s+1)*$l}]
set b [expr {(($b-1)*$s+1)*$l}]
return [list $r $g $b]
}
|