Changeset 1342 for trunk/gui/scripts/color.tcl
- Timestamp:
- Mar 18, 2009, 2:59:21 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gui/scripts/color.tcl
r1075 r1342 27 27 # if frac overflows the value, pass changes along to saturation 28 28 if {$v < 0} { 29 30 31 29 set s [expr {$s+$v}] 30 if {$s < 0} { set s 0 } 31 set v 0 32 32 } 33 33 if {$v > 1} { 34 35 36 34 set s [expr {$s-($v-1)}] 35 if {$s < 0} { set s 0 } 36 set v 1 37 37 } 38 38 … … 50 50 foreach {h s v} [Rappture::color::RGBtoHSV $color] { break } 51 51 if {$v < $min} { 52 52 set v $min 53 53 } 54 54 return [Rappture::color::HSVtoRGB $h $s $v] … … 65 65 foreach {h s v} [Rappture::color::RGBtoHSV $color] { break } 66 66 if {$v > $max} { 67 67 set v $max 68 68 } 69 69 return [Rappture::color::HSVtoRGB $h $s $v] … … 82 82 # 83 83 if { [catch {winfo rgb . $color} status] != 0 } { 84 85 86 87 84 set s 0 85 set v 0 86 set h 0 87 return [list $h $s $v] 88 88 } 89 89 foreach {r g b} $status {} … … 98 98 99 99 if { $delta == 0 } { 100 101 102 103 104 100 # delta=0 => gray color 101 set s 0 102 set v [expr {$r/65535.0}] 103 set h 0 104 return [list $h $s $v] 105 105 } 106 106 107 107 if {$max > 0} { 108 109 } else { 110 111 112 113 114 108 set s [expr {$delta/double($max)}] 109 } else { 110 # r=g=b=0 => s=0, v undefined 111 set s 0 112 set v 0 113 set h 0 114 return [list $h $s $v] 115 115 } 116 116 117 117 if {$r == $max} { 118 118 set h [expr {($g - $b)/double($delta)}] 119 119 } elseif {$g == $max} { 120 121 } else { 122 120 set h [expr {2 + ($b - $r)/double($delta)}] 121 } else { 122 set h [expr {4 + ($r - $g)/double($delta)}] 123 123 } 124 124 set h [expr {$h*1.04719756667}] ;# *60 degrees 125 125 if {$h < 0} { 126 126 set h [expr {$h+6.2831854}] 127 127 } 128 128 return [list $h $s $v] … … 138 138 proc Rappture::color::HSVtoRGB {h s v} { 139 139 if {$s == 0} { 140 141 142 143 144 } else { 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 140 set v [expr round(255*$v)] 141 set r $v 142 set g $v 143 set b $v 144 } else { 145 if {$h >= 6.28318} {set h [expr $h-6.28318]} 146 set h [expr $h/1.0472] 147 set f [expr $h-floor($h)] 148 set p [expr round(255*$v*(1.0-$s))] 149 set q [expr round(255*$v*(1.0-$s*$f))] 150 set t [expr round(255*$v*(1.0-$s*(1.0-$f)))] 151 set v [expr round(255*$v)] 152 153 switch [expr int($h)] { 154 0 {set r $v; set g $t; set b $p} 155 1 {set r $q; set g $v; set b $p} 156 2 {set r $p; set g $v; set b $t} 157 3 {set r $p; set g $q; set b $v} 158 4 {set r $t; set g $p; set b $v} 159 5 {set r $v; set g $p; set b $q} 160 } 161 161 } 162 162 return [format "#%.2x%.2x%.2x" $r $g $b]
Note: See TracChangeset
for help on using the changeset viewer.