2006-03-13 [HE] An alternative to the old-fashioned Unix colorchooser. Developed for the use in etcl, you can use it together with the [Alternative dialogs for pocketPC/etcl]. There I also describe how to replace tk_chooseColor. With some changes you can use it in other enviroments than etcl (Remove windowfit is the first step) # colorBox.tcl (wiki version) # Version 0.0 # inspired by the book 'Effektiv Tcl/Tk programmieren'. Used their code to begin the project. # Mark Harrison, DSC Communications Corp. # Michael McLennan, Bell Labs Innovations for Lucent Technologies # based on informationen from http://de.wikipedia.org/wiki/HSV-Farbraum # Function: # A color chooser (a replacement for tk_chooseColor) namespace eval ::he::dialog { variable colordialog set colordialog(c00) #000019 set colordialog(c01) #000033 set colordialog(c02) #00004c set colordialog(c03) #000066 set colordialog(c04) #00007f set colordialog(c05) #000099 set colordialog(c06) #0000b2 set colordialog(c07) #0000cc set colordialog(c08) #0000e5 set colordialog(c09) #0000ff set colordialog(c10) #001900 set colordialog(c11) #003300 set colordialog(c12) #004c00 set colordialog(c13) #006600 set colordialog(c14) #007f00 set colordialog(c15) #009900 set colordialog(c16) #00b200 set colordialog(c17) #00cc00 set colordialog(c18) #00e500 set colordialog(c19) #00ff00 set colordialog(c20) #190000 set colordialog(c21) #330000 set colordialog(c22) #4c0000 set colordialog(c23) #660000 set colordialog(c24) #7f0000 set colordialog(c25) #990000 set colordialog(c26) #b20000 set colordialog(c27) #cc0000 set colordialog(c28) #e50000 set colordialog(c29) #ff0000 set colordialog(c30) #191919 set colordialog(c31) #333333 set colordialog(c32) #4c4c4c set colordialog(c33) #666666 set colordialog(c34) #7f7f7f set colordialog(c35) #999999 set colordialog(c36) #b2b2b2 set colordialog(c37) #cccccc set colordialog(c38) #e5e5e5 set colordialog(c39) #ffffff package require msgcat namespace import ::msgcat::mc } # de.msg namespace eval ::he::dialog { msgcat::mcset de "Color" "Farbe" msgcat::mcset de "Bad option %1\$s:" "Falscher Parameter: %1\$s:" msgcat::mcset de "Must be -initialcolor, -parent, or -title ." "Erlaubt: -initialcolor, -parent, oder -title ." msgcat::mcset de "Bad window path name %1\$s" "Fenster %1\$s existiert nicht." msgcat::mcset de "Ok" "OK" msgcat::mcset de "Cancel" "Abbrechen" msgcat::mcset de "Add color" "Farbe hinzufügen" msgcat::mcset de "Red" "Rot" msgcat::mcset de "Green" "Grün" msgcat::mcset de "Blue" "Blau" msgcat::mcset de "Hue" "Farbt." msgcat::mcset de "Sat." "Sätt." msgcat::mcset de "Bright." "Hell." } # en.msg namespace eval ::he::dialog { msgcat::mcset en "Color" msgcat::mcset en "Bad option %1\$s:" msgcat::mcset en "Must be -initialcolor, -parent, or -title." msgcat::mcset en "Bad window path name %1\$s" msgcat::mcset en "Ok" msgcat::mcset en "Cancel" msgcat::mcset en "Add color" msgcat::mcset en "Red" msgcat::mcset en "Green" msgcat::mcset en "Blue" msgcat::mcset en "Hue" msgcat::mcset en "Sat." msgcat::mcset en "Bright." } proc ::he::dialog::windowFit {top} { if {$::tcl_platform(os) eq {Windows CE}} { if {[info exists ::etcl::etcl]} { bind $top {::etcl::autofit %W} ::etcl::autofit $top } else { wm geometry $top 240x[expr 320 - 51]+0+0 } } else { wm geometry $top 240x[expr 320 - 51]+[expr [winfo pointerx .] - 120]+[expr [winfo pointery .] - 135] } return } proc ::he::dialog::colordialog {args} { variable colordialog set colordialog(-initialcolor) #408080 set colordialog(-parent) {.} set colordialog(-title) [mc "Color"] # First we check the parameter foreach {para value} $args { switch -exact -- $para { -initialcolor { colordialog_checkAndSetInitialcolor } -parent { if {![winfo exists $value]} { error [mc "Bad window path name %1\$s" $value] } set colordialog(-parent) $value } -title { set colordialog(-title) $value } default { error "[mc "Bad option %1\$s." $value] [mc "Must be -initialcolor, -parent, or -title ."]" } } } scan $colordialog(-initialcolor) "#%2x%2x%2x" colordialog(red) colordialog(green) colordialog(blue) colordialog_set_hsb # create the windowname for the dialogbox if {$colordialog(-parent) eq {.}} { set colordialog(w) ._colordialog } else { set colordialog(w) [set colordialog(-parent)]._colordialog } set w $colordialog(w) if {[winfo exists $w]} { colordialog_destroy } colordialog_create set colordialog(selected) {} vwait ::he::dialog::colordialog(selected) return $colordialog(selected) } proc ::he::dialog::colordialog_create {} { variable dir variable colordialog set w $colordialog(w) toplevel $w -class colordialog wm protocol $w WM_DELETE_WINDOW ::he::dialog::colordialog_cancel wm minsize $w 216 65 ;#220 wm maxsize $w 240 [expr 320 - 52] wm title $w $colordialog(-title) frame $w.e ;# frame with the entries frame $w.c ;# frame with HSB-chooser frame $w.c.s ;# frame with the user defined colors frame $w.b ;# frame with buttons # frame with HSB-chooser canvas $w.c.dial frame $w.c.sample -width 10 -height 101 grid $w.c.dial -row 0 -column 0 grid $w.c.sample -row 0 -column 1 grid $w.c.s -row 1 -column 0 -columnspan 2 grid rowconfigure $w.c 0 -weight 0 grid rowconfigure $w.c 1 -weight 1 grid columnconfigure $w.c 0 -weight 1 grid columnconfigure $w.c 1 -weight 0 # frame with the entries label $w.e.lr -text "[mc "Red"]:" label $w.e.lg -text "[mc "Green"]:" label $w.e.lb -text "[mc "Blue"]:" label $w.e.lh -text "[mc "Hue"]:" label $w.e.ls -text "[mc "Sat."]:" label $w.e.lv -text "[mc "Bright."]:" entry $w.e.er -width 5 -validate all -vcmd {::he::dialog::colordialog_vcmdRGB %P %V red} entry $w.e.eg -width 5 -validate all -vcmd {::he::dialog::colordialog_vcmdRGB %P %V green} entry $w.e.eb -width 5 -validate all -vcmd {::he::dialog::colordialog_vcmdRGB %P %V blue} entry $w.e.eh -width 5 -validate all -vcmd {::he::dialog::colordialog_vcmdH %P %V} entry $w.e.es -width 5 -validate all -vcmd {::he::dialog::colordialog_vcmdS %P %V} entry $w.e.ev -width 5 -validate all -vcmd {::he::dialog::colordialog_vcmdB %P %V} grid configure $w.e.lr -column 0 -row 0 grid configure $w.e.lg -column 2 -row 0 grid configure $w.e.lb -column 4 -row 0 grid configure $w.e.lh -column 0 -row 1 grid configure $w.e.ls -column 2 -row 1 grid configure $w.e.lv -column 4 -row 1 grid configure $w.e.er -column 1 -row 0 grid configure $w.e.eg -column 3 -row 0 grid configure $w.e.eb -column 5 -row 0 grid configure $w.e.eh -column 1 -row 1 grid configure $w.e.es -column 3 -row 1 grid configure $w.e.ev -column 5 -row 1 $w.c.dial create image 5 5 -anchor nw -image $colordialog(img_hs) $w.c.dial create image 190 5 -anchor nw -image $colordialog(img_v) $w.c.dial create oval 0 0 5 5 -fill black -tags hsval -width 3 -fill {} $w.c.dial create line 189 5 201 5 -fill black -tags bval -width 3 $w.c.dial configure -width 201 -height 107 $w.c.dial bind hsval "::he::dialog::colordialog_set_hs %x %y" $w.c.dial bind bval "::he::dialog::colordialog_set_b %y" # frame with the user defined colors for {set n 0} {$n <= 3} {incr n} { for {set m 0} {$m <= 9} {incr m} { radiobutton $w.c.s.c$n$m \ -indicatoron 0 \ -bg $colordialog(c$n$m) \ -selectcolor $colordialog(c$n$m) \ -value c$n$m \ -variable ::he::dialog::colordialog(c) \ -width 2 \ -command "::he::dialog::colordialog_sel $w.c.s.c$n$m" grid configure $w.c.s.c$n$m -row $n -column $m } } # frame with buttons button $w.b.ok -text [mc "Ok"] -command ::he::dialog::colordialog_ok button $w.b.cancel -text [mc "Cancel"] -command ::he::dialog::colordialog_cancel button $w.b.add -text [mc "Add color"] -command ::he::dialog::colordialog_add pack $w.b.ok $w.b.cancel -side left pack $w.b.add -side right # Frames darstellen grid configure $w.e -row 0 -sticky nsew grid configure $w.c -row 1 -sticky ew grid configure $w.b -row 2 -sticky nsew grid rowconfigure $w {0 2} -weight 0 grid rowconfigure $w 1 -weight 1 colordialog_refresh windowFit $w grab set $w return } proc ::he::dialog::colordialog_checkAndSetInitialcolor {value} { variable colordialog switch -regexp -- $value { {^#[0-9a-fA-F]{3}$} { scan $value "#%1x%1x%1x" r g b set r [ expr {$r * 255 / 15}] set g [ expr {$g * 255 / 15}] set b [ expr {$b * 255 / 15}] set colordialog(-initialcolor) [format "#%02x%02x%02x" $r $g $b] } {^#[0-9a-fA-F]{6}$} { set colordialog(-initialcolor) $value } {^#[0-9a-fA-F]{9}$} { scan $value "#%3x%3x%3x" r g b set r [ expr {$r * 255 / 4095}] set g [ expr {$g * 255 / 4095}] set b [ expr {$b * 255 / 4095}] set colordialog(-initialcolor) [format "#%02x%02x%02x" $r $g $b] } {^#[0-9a-fA-F]{12}$} { scan $value "#%4x%4x%4x" r g b set r [ expr {$r * 255 / 65535}] set g [ expr {$g * 255 / 65535}] set b [ expr {$b * 255 / 65535}] set colordialog(-initialcolor) [format "#%02x%02x%02x" $r $g $b] } {^#} { error "invalid color name \"$value\"" } default { if {[set value1 [colorname2color $value]] eq {}} { error "unknown color name \"$value\"" } set colordialog(-initialcolor) $value1 } } return } proc ::he::dialog::colordialog_refresh {} { variable colordialog set w $colordialog(w) set h $colordialog(hue) set s $colordialog(saturation) if {$h eq {}} { set h 180 } set x0 [expr ($h / 2) + 5] set y0 [expr (100 - $s) + 5] $w.c.dial coords hsval [expr $x0-4] [expr $y0-4] [expr $x0+4] [expr $y0+4] set b $colordialog(brightness) set y1 [expr (100 - $b) + 5] $w.c.dial coords bval 189 $y1 201 $y1 $w.c.sample configure -background [colordialog_hsb2rgb1 $colordialog(hue) $colordialog(saturation) $colordialog(brightness)] foreach {win index} [list $w.e.er red $w.e.eg green $w.e.eb blue $w.e.eh hue $w.e.es saturation $w.e.ev brightness] { $win configure -validate none $win delete 0 end $win insert end $colordialog($index) $win configure -validate all } return } proc ::he::dialog::colordialog_vcmdRGB {value type name2} { variable colordialog set state 0 switch -exact -- $type { key { if {($value >= 0 && $value <= 255) || ($value eq {})} { set state 1 } } focusout { if {($value >= 0 && $value <= 255)} { set colordialog($name2) $value set state 1 } if {$value ne {}} { colordialog_set_hsb } colordialog_refresh } } return $state } proc ::he::dialog::colordialog_vcmdH {value type} { variable colordialog set state 0 switch -exact -- $type { key { if {($value >= 0 && $value <= 359) || ($value eq {})} { set state 1 } } focusout { if {$value >= 0 && $value <= 359} { set colordialog(hue) $value set state 1 colordialog_set_rgb } elseif {$value eq {}} { set colordialog(hue) $value set colordialog(saturation) 0 set state 1 colordialog_set_rgb } colordialog_refresh } } return $state } proc ::he::dialog::colordialog_vcmdS {value type} { variable colordialog set state 0 switch -exact -- $type { key { if {($value >= 0 && $value <= 100) || ($value eq {})} { set state 1 } } focusout { if {($value >= 0 && $value <= 100)} { set colordialog(saturation) $value set state 1 } if {$value ne {}} { if {$colordialog(hue) eq {}} { set colordialog(hue) 0 } colordialog_set_rgb } colordialog_refresh } } return $state } proc ::he::dialog::colordialog_vcmdB {value type} { variable colordialog set state 0 switch -exact -- $type { key { if {($value >= 0 && $value <= 100) || ($value eq {})} { set state 1 } } focusout { if {($value >= 0 && $value <= 100)} { set colordialog(hue) $value set state 1 } if {$value ne {}} { colordialog_set_rgb } colordialog_refresh } } return $state } proc ::he::dialog::colordialog_destroy {} { variable colordialog grab release $colordialog(w) destroy $colordialog(w) return } # command of ok button proc ::he::dialog::colordialog_ok {} { variable colordialog set colordialog(selected) [format "#%02x%02x%02x" $colordialog(red) $colordialog(green) $colordialog(blue)] colordialog_destroy return } # command of cancel button proc ::he::dialog::colordialog_cancel {} { variable colordialog set colordialog(selected) {} colordialog_destroy return } # add user defined color proc ::he::dialog::colordialog_add {} { variable colordialog if {$colordialog(c) eq {}} { tk_messageBox -icon error -type ok -message "No color button selcted!" return } set w $colordialog(w) set color [$w.c.sample cget -background] set colordialog($colordialog(c)) $color $w.c.s.$colordialog(c) configure -bg $color -selectcolor $color return } # choose user defined color proc ::he::dialog::colordialog_sel {win} { variable colordialog set color [$win cget -background] scan $color "#%2x%2x%2x" colordialog(red) colordialog(green) colordialog(blue) colordialog_set_hsb colordialog_refresh return } # calculate Brightness from y-coordinate proc ::he::dialog::colordialog_set_b {y} { variable colordialog if {$y < 5} { set y 5 } elseif {$y > 105} { set y 105 } set colordialog(brightness) [expr 100 - ($y - 5)] colordialog_set_rgb colordialog_refresh return } # calculate hue and saturation from x- and y-coordinate proc ::he::dialog::colordialog_set_hs {x y} { variable colordialog if {$y < 5} { set y 5 } elseif {$y > 105} { set y 105 } if {$x < 5} { set x 5 } elseif {$x > 184} { set x 184 } set colordialog(hue) [expr ($x - 5) * 2] set colordialog(saturation) [expr 100 - ($y - 5)] colordialog_set_rgb colordialog_refresh return } proc ::he::dialog::colordialog_set_rgb {} { variable colordialog set rgb [colordialog_hsb2rgb $colordialog(hue) $colordialog(saturation) $colordialog(brightness)] set colordialog(red) [lindex $rgb 0] set colordialog(green) [lindex $rgb 1] set colordialog(blue) [lindex $rgb 2] return } proc ::he::dialog::colordialog_set_hsb {} { variable colordialog set hsb [colordialog_rgb2hsb $colordialog(red) $colordialog(green) $colordialog(blue)] set colordialog(hue) [lindex $hsb 0] set colordialog(saturation) [lindex $hsb 1] set colordialog(brightness) [lindex $hsb 2] return } proc ::he::dialog::colordialog_hsb2rgb {h s v} { set s [expr $s / 100.0] set v [expr $v / 100.0] if {$s == 0} { set v [expr round(255*$v)] set r $v set g $v set b $v } else { set hi [expr fmod(floor($h / 60.0), 6)] set f [expr $h / 60.0 - $hi] set p [expr round(255 * $v * (1.0 - $s))] set q [expr round(255 * $v * (1.0 - $s * $f))] set t [expr round(255 * $v * (1.0 - $s * (1.0 - $f)))] set v [expr round(255 * $v)] switch [expr int($hi)] { 0 {set r $v; set g $t; set b $p} 1 {set r $q; set g $v; set b $p} 2 {set r $p; set g $v; set b $t} 3 {set r $p; set g $q; set b $v} 4 {set r $t; set g $p; set b $v} 5 {set r $v; set g $p; set b $q} } } return [list $r $g $b] } proc ::he::dialog::colordialog_hsb2rgb1 {h s v} { variable colordialog set rgb [colordialog_hsb2rgb $h $s $v] return [format "#%02x%02x%02x" [lindex $rgb 0] [lindex $rgb 1] [lindex $rgb 2]] } proc ::he::dialog::colordialog_rgb2hsb {r g b} { variable colordialog if {$r == 0 && $g == 0 && $b == 0} { set h 0 set s 0 set v 0 } else { set r [expr $r / 255.0] set g [expr $g / 255.0] set b [expr $b / 255.0] set l [list $r $g $b] set max [lindex [lsort -real $l] end] set min [lindex [lsort -real $l] 0] set maxColor [lindex [lindex [lsort -index 0 -real [list [list $r r] [list $g g] [list $b b]]] end] 1] set s [expr int(($max - $min) / $max * 100)] set v [expr int($max * 100)] if {$s == 0} { set h {} } else { switch -exact -- $maxColor { r { set h [expr int((0.0 + ($g - $b) / ($max - $min)) * 60)] } g { set h [expr int((2.0 + ($b - $r) / ($max - $min)) * 60)] } b { set h [expr int((4.0 + ($r - $g) / ($max - $min)) * 60)] } } if {$h < 0} { set h [expr $h + 360] } } } return [list $h $s $v] } set ::he::dialog::colordialog(img_hs) [image create photo -data { R0lGODlhtQBlAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/ AP//AAAA//8A/wD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBmAABmMwBmZgBm mQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/ AAD/MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMz mTMzzDMz/zNmADNmMzNmZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPM ADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/mTP/zDP//2YAAGYAM2YAZmYA mWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZmzGZm/2aZ AGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/ mWb/zGb//5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lm AJlmM5lmZplmmZlmzJlm/5mZAJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnM mZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwAM8wAZswAmcwAzMwA/8wz AMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZZsyZ mcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8A AP8AM/8AZv8Amf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9m mf9mzP9m//+ZAP+ZM/+ZZv+Zmf+ZzP+Z///MAP/MM//MZv/Mmf/MzP/M//// AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAC1AGUAAAj/ALlxEzdQnEF0 4tApROeOobuH9NzRm0hPX0V9GPVZ02itoyxrskLKcjTSkUk1jtSoVGOEpREj R2AemYnkCJKbSJLkTMJTSRIlQJUsEbqk6JIiR4so/VHkh9MfOaDmmDojx4yr M1pkbdEiStcoYOtEqUO2TiazmdL2ytSrba9wb8PJDQeOLri738B92/vNW19v gLt560a4GzfDAgUSNHgw4cKGDyFKpGgx48aOHkGKJGnyZMqVLV+KjjmTpk2c Onn2/Bl0qFGkSpc2fRp1KlWrWLVy3e0VbNixZc+mVcvWLdy5de/i1cvXL+DA gwsfTixwHOPG6R47fCdx8sR9Fy3v/8MMEuSskJxNPkK5kuWa0TLZ2Dx9s83O 1W5aE31TFLbSNEw9BdUYtlllVRdX6cbVFb79tkdwaH3CVnFtnRMXcucop5de 5ezlHGDkCFaYYeNQN1BBjS3EkEOSUVRReJdh9pFII5XkWXuhiQaTTKbhlNN9 P7EGlGv9JSWbgLXZVhVWWW3F21e/lWUWWsS59daFySmXF199/QXdiNNVx02J 1qUjTnbZvYOOmtxxVw89b74J3j760DnendZcI4ue5/XpyCyOrCeoGmsQasR7 axyRaKJsINGofZAm0UYS+eX3hhKX8qdpEW8UkYanPwA4xg+jEkggggheMYOq V7TQ6qtR7P8Rax0PflKHrRJKOEwvu+5q4TnhAJvhsOCY842xHSbrTTnehOhs N+NAO+aJ16W4ImSRReRiZRjFmBmN6HXG3mcqwVdaaTXdlJpqqwUlFFFHGdnU bE4leduSuWXVW4NjAScclRNaeZxcWS7HpYfPiRgdYYmRKU6ZZ56JTprutOlO PRfDSc+cddZpzXjX5LmnLH4C+kiggaqxXqGIHqroEfLF7CgSk07qBqWUKmEp pkts2umnAAZNag6n5tCF0TOkuqqrrkbBoKxQ03prJrlmMozVvPbya7DBgpOh OcUe+42yzJLTbLPdhBgtmdQWZKaKCqkZWXdvTsTteBx5pOdmIwH/Kq5K77HE Ukzv9TizujtN6pO7l7521KfzPkWgVLYhmC/TvX0lq5Rk2TrchLu2NXCGduFl bHN9MZswYSUaRuLDsJuJ5pprVnxxxnJuvHHHdn4ssp58kvwnyoOu7DKjMMM8 c6Q157xzpj1H3+nPoZJqvalGI600rAw+PWutU+uKta9aa821sF6HbSyyYy97 9rNqT+swxLOzabubuOveO8i/j1wy8SojlKFatqjkNepRNJOUAm9WKUzxbHqe ApXQSkW07KFqVUt7VdO89yDwVU18vSof+r6mPrGR7X1pg5a02GYd+k2MdhbD mAw1xrH95emGwCOZ8EyWspUJEFEvkxkC/5vHQOc5UFM941QEgVY9ChbtgqzK oNNi9b1bhc9qWAzh1kZYrC6ub2ztKxva1KbC+cVOYvWrnQzzV0PfhSyH/+Ph oFg2wOMZcHk0S2ARGwg9CDJRVEPD3tGgmMENTjFqHbQiCMcnwq6R8IsnFOOz 1rbCcZRpHLJLR5rS0aZ3yLAecqrHnPZhJ1J+7BpvnAWfZgGoWTziZK8U1BpY NkuYrSFmbHgUG2rWBga6wVJuyNQbNDVMTqUhaGMQ1RhM1YVBNjNpV2BVNGN1 BajtoVZ7yNUnrjaMbmptGL86h7DE6TVzgM0c5UBWOZhVDnKYzZ3OsuQKzyi7 F9ovhmzcHZ7eOP+y4LWSeCmjIxCRd0A8EhFnfHygEv/YxEBaMGkYZJUhoVZF XFHtotzM2hbTd06xsY+d70MbJeeHyTNpck2cXNM73OTJi4FyY6Kskyn3gco8 oXJPrCTZI1r5SpWtYWW1nCUudQmpNtisl5T6JaaC2bNivuGYnjpmqJZJqi4w E1VXSNU0o2lNbOLqE7raptW8eQ5wBouc5zBnscx5rHWOjRzsdGfaxqE2S44J di5MU+3wFyca6tONONTh/2AZQB8ONIjKG+ICEaqzIybxZxK8nkMHCdHtGZKD UrMoCLNGPi6eM2zJCiMKJ1lJS6YDk5rkJCdX6snWghKU+xClKElJW5r/0hSV 11AlK1m5097G8qezDK5Qb5nLXe7SqMh1Qy9/GczmDvO5w0zDU4+ZhmRadwxW zW4zu5DVaHqXq9W8ZjazCdZtmreb3SyresXJ3rSm1ZzoROc620lfeJKDrpbM bwtLmtqJpZS1F2spbGFqp2uA7Ka5XSVPTdbTR/yUUEG9Jcxy6ahd0syolOql zoK5VE1JN6pASyaplkk0qxrtmdyVZveqGatr0iqbtwKr1cSa3m8KyxxfY2t8 x7bOZcG1WXK9b11Ni0nUavIdqmWta18L29qS0sC4xa1ud8tbV/7WwQ4eLhuI m8s2GBe5vVwuc50LXelSl7rXXeYytbtd7qa4/5pwFu94P0FesA5jm+hNb3vF iWP4wjed850vXO2L3/uSib+Y9C+bOFkxAb90wLQ95YGBl1NXMhiWDw7uoWq5 5QNaGLmSQipzNyzM6UGVulMtFYm3a7SsriqarmLxHqr5Ylxlk2o09maN2VvO HK/PrfQF8jvpCi27Ejm1qUWykuuxZNjK1slPvi0qdZvb3fbWyq8ErpaL6+Vu JzfMY34DmaH71Oke07rVVTOb3dxd8Mr5mnQu73nxnF5wgnPP7vUzoOW7zkG3 E5741e9pB57sJLOW2UyOrcKjHeVpV7vKvs02loV7y4oX98vHVa7GmSvujkfX 3GhO95qxi93tdvfN7v8OL7znXN4751m99863n+MbaH8TWsj6LbIm1VHwlcLj 4J6shz1eu3B+MByV2HD4bmkB8VdCQuLBhYTFixuJ44JZEmJm7iTI/dRJnPnc jVCzug/R5mZeIRDenfU1AyHeeH+iFC3HczLQu9528Pm95mCHOQG9znX0+9/k UIc7A55fgiNb2UpuNtFna9uGJ5jKTY/lxIXb6Yt/GczgHvO4zQzyNKu75G1u d9pV3vY6xz3P9WZvn2fO95oDHuCGHoc6ZC/7dPAcHunA/c9/bo939H7oQ+dH PYRv9OLvgx/XQH7Slz8LbMyC6dB/BC0e8fTqr0Hq2GcDJNhQ9e63IRJtwLr/ +N0gCTdMwvzmf8PW158GrzciDe8Pe9gPMQb6k53sgehC/tHO/7Pvge2lsAcB CHdwlwyfYIBzN3ftMAwLaHcOeA7tYA4RqHcUWA7sUA5+l4HksA6B14GzN3sD Z2RJtlorhXBB52wL13gNN2VUFnFXFlydxmUYB2Yal3UdF0wf93XVJXKfV3bs lnJyFm+m53L0Zm/rJXP6xm+C9nqDF3sfaHtQqHvvsHu+53tCd4XEd3xaiHxc eA3M53zOF33TN33Wh33Xp31o6H3gB37jV37ld37rp37q1350GH9jIH/1V39d cH/6p39n94dsF4gCKIBvV4gIOAwJyIAMCIGMGIGO/5h3eWeBkqiBHMiBgveB tHdaIIhsuUeCrNV7TAZKwkdbUIZ8UpZbzmdtrjR9Lyh127Z9XXZc4GdUG1d+ v+RxXldu1BV2O6hmZEdy24V27DZraPdugyhvYGWAqKeIqpdWEfhn6HSBS7iB N0d7T8hzt5d7U7iNv2eFwTd8w7eFx5d8XliOYPh86DiG1LeOZrh97sh93Pd9 8tiG5Id+cCiH7Od+8Ad/d5iH9reHfbh/gPh/BDmAhViAB3iAiKiIDdiIECiB kFiBF5iBGEiNlxh41lh72NiJVMh73oiF4Fh85Lh85th86fh80seO1Hd9LPmO 26eG8xh+9fiG9jiHXqePdv84f/4IkPvnh/0niABIiASYkImogAz5kBMYkZE4 kRhYkZbogRm5kbqnjR75e1f4jcYnkl34hSYZhiipjmV4hi8Jj2sYfmbphvV4 j3F4k3W4j3iok3yIfwHpf0FpkAh5iInYkA/4iEl5gX45iU5pkRiJiVLJkVRZ hVYJfCE5jlvphV2ZjilJhuzYkmKZhmQZk/RIk/nYlm+5k3zYkz9Jl4M4gEJJ lAqZl4vIlxEpiUxZiYJ5idaoDrenDroHD7sHD79nD8Cnm8NnD8XHD7/Jhdiw fMPZfLQQhrQwhpCgnNUHCS8JCd0XCWsYCeJHneQnCW8oCXA4CevHne3XCPEH nnf/eAjzdwj3FwjnuX+BAICBMIClQIClgIDJkIDzyYDJ4IDtgJ+OyA4UyJ8W uA4TuQ6VqA4DCpvXaJgdiZhXGZLhqJXm6JjnKIYpGZbZN5YwyYYyiZZqaZOc yY94+I+f6ZMDWZeleZcLaZR6iZRK+ZetSY1PSZiyKZu5R5u0aZu+h5u4yZv8 4Ju+CZzHB5zYwA9BmnzDOZzHaZzJmaTS55xM6o5MGgnQyX3SSZ3UGX7YqZ3a aX7cuaU32QiT4KXgCX/kOab2Z57ouZ76t55qyp6l0J7veYDxGZ/12Q73eZ/5 CYH5yQ7toKcSyJ/8CaD/KaCCuoExGqMaGYUcyY2I+ZFY/8mYIwmhJgl9Xzmh k+mSZBmPGCp+GZqW6ceWONmPcKmHISqQQDmapYmARHmiR6maEgmYlPiagxmj 8ECjtmmb9oCjupmrubqjvAqcviqkQlqkRooNx1msSZqcy9mkTwqd0DmlkkCl VxqtWMql1Aqm4HmtY9oIZGqmh3Cma7qebRqu7xmnySCn83mudUqn+bmuebqn fvqn7ACg8iqoAkqghSqjsql7tJl7NnqrubmbxOejwEqkxAmGR6qktLCc1Oec C+uk3RelU/p9VXql1wmH2ql+3vml4Sl/5Fl/5rmH6Jmm6hmI7SmAJTuucCqf 9NmAd7qn+9mffgmog7oOBBp4sv9ps4U6q7W6s7iao7rJqz36q8AapEQrrMRK rMeasEqrrFDatFP6tM8atVc6CdNKrV96tdZ6rdqqrebZtWfard26puI6ruNa rmZ7rupqp+zqsnratu8ar/FKrzQ7t4Uqe/i6r7U6hbh5o7sJsMMHnESqfMV5 tEj6fMm5pGTonNfnnNoHsdIpsdUpfthpflm6pd/pfmG6tR5bpueJf+t5duv5 fyf7pu+JgPGJiPU5nyy7nxPon3AbqBgooIRqibJptzpbozvrrz67qzwqtL9K tMEqrMWKtMearAnrnE3brFALrdJKtc5rtdwJphqrtdnatV4Ltmoarm5KtmZr rmibrmv/u65t667vKq9xS6/2SrP3Sqs8q7v+qqu967vAK7xHm7RJarzKirzK 66zQSp3Nq51WK73Uu7XWa71f+63gur1lS67eq7pqy67jW75wK7eCmr73Gg/s a5vx0LO6eQ+8u6P94Lv80A/zO5zZMKzFWgvFm7C1sKxQWgtPS6W24L/RegtV y523EL1YewtaC56HEAvbap6rwK1qugrtqcCrwMDz+QzfS6fzEL7tMA8RzJ/y AK/yGg/oS7MYnLO0iru1+r7w27tBW8JGW7/Eu7THy7TM6rTLK63TesMC3MM+ TMDX663fqr1ju8Doiq5pK75s+7ZWfL50q74xisGGDA8bnMjw/3APi7zI9uDB /WAPkTzJI1zJIUzCmIwNJ7zJmkwL2UALKhzKoAwJLVzKpBwJMJzKkTDDrCwJ tuDKkmDDsjwJOVzLtNwIPJzLjRALu7zLP3wIQxzMgWDExDzMw1wKSZzMpfAM y7zMycDE85AM0TzNUVzNTyzF2MwOVbzN2rwO8rAOWBzO4KwOhtzFOtu+HAy/ vSq0ZGzGxrrCyaq/yRvD/Su10fq81Yq12ErAXGvA2JvAeEy2StzA4Lu2UxzI 85rF9iqb5azIG8zIEP3IEg3JkizJljzC2JDJJMzJn9zRngzKIG3KIn3KMMzK qwzLr/zKshzLtNzStYzLMM3LMv3LQP8MxMEMzMZczMqcxMzc08/809AszdJs zVHMDtksxdz8zUrtzeDc1A0tqzW6wbnbyGEcyUALnCQ8tCZMvx9tvy28tM7Z wvQMw9Ipta98z7EMwDssx75Mx8Dsz8YM0Mgs0OXKzHss1H1c1H+szRLM1BSM wXR7yIoM0Y3swYZd0ZR8yRet0RmtyY7t0R4tyiOtyiad0iid1rNsy5oN07os 075c07980zo91zzdzD7NxEFNzddM1Edt1Hy9zUy91OL81IKNyIXtyId92Ilt yY290Y/dyZEd0qMs0qhc3JR90pat0pjt0rfc2b0806At2jk93Ttt2s6M2kAt 1Kt9za6N1K//3c2y7dTj3NC2PdiFPdESPckWrdjs3dgcDdwfLdkhTdLGvcr2 ndywvNKa7dKc/dz+Hd1vLczETNpz3dPXnd3TPNTbbc2undTgzdSz7dTkPOEO fdsRrduIvd69/dub/NGfLN+TTcr0XdL3jdz5jdksrcs87NnQHdoBjtM6ndME buCn/dMJrtrd/d2wHd6zTeHkHA+JDOSLHA8QfQ+GbeSSfA+T3A+XzOQjzOQZ nQ2YnA2bTOWeXAsdXQuhrOWkrOWo7OW2UAusbAspTeaxbAuyfAu1rOa0rOa4 HAu5HAsyLec/vAo1vQrBjOfAjOfIzOfPsAo9/QyoLejS/AzTPA/X/4zoUYzo Ri0P2CwP2wzp3hwPSg3k4AzkPl7hhH3h6Z3h7I3RmfzekC3coSzipVzflW3i lq3fzK3i//3ZLi7do63MNH7gqa3drJ3jDr7U3xzh5A3kD03kQ17kRz7JSi7J Ts7klyzlUV7lzn7lWb7lqQzmYr7K1U7mZa7SaB7LbK7max7nKy7nu0znsWDn dZ7nyezngL7M6y7ogz7Nhi7Nio7o1+zojR7p+D7plR7OmF7h5r3p6K3eib3h vt3ho/7hpD7iqF7i+K3fKd7fLA7roG3TLz7g1V3aNI7g2q3gOe7dOx7bEC7e hgzs90DkJl/yRp7yKd8PSq7kyv7yyi7lMv/fD1Re8zafDVie8ziv5Twv5j4f 5kCP7UJ/C2iO5t5+9N4O50p/C3Le9E5f7lBv53g+9Xj+51YP6IDu7lo/D4Zu 6PT+9fTu6GI/D5Be9mYvD5Se9mgP7EIO7Igs7Ci/yEhu5Ma+5E0+5RtN5Zps 5Tif5R+u5aDs5Tz/5ax87WZO5rK87d7e5uA+7nN+55C/5+je5+ne0+1O6IIO 74ee6I+O1JCuzZKO9pXe65bO9myP8kSu8ivf8izf+jAP8zMv8zev8znf87b/ 82Iu9NhO9Lxf9Ej/+0uv9E8v9VFP9caP9Vav9e7O9czf9WD//GMv9mev9mlv +j8e5BAN93O//XX/j+x4H+V5/+x9H/jS3uXTXvhjnu2urPiK7+ZM3/hN7/h1 btN6PvXDzOdVz+6BPujvXuib3+gAMY/dPHkC5R1kd1DeOnnxFsaDuA5iPHUT 4927ePHeRo4c+937GLLfSJIls/U7mRIlymwtW9bKBlNmLZo1bdW6aUvnTp23 bPkE+vPWUKJFh8a6hVRpLKZNY616GnXVVKqrnlm1+kzr1q3znnkFO0/sWLIF zRJEq1ChQ7YNLVrEGFdjx44hQYIsOVJlSpd9X8aMWVOwTZyFeR7+mRio0aSN myZ12hTq5KqVsV7FzFUz2K9fyYo9a1bt6LZv4WbEl7EjPo93/d0t6S8v/0p/ e1tq8xtTm8zAtXbnLKwNsa1tihNvY3wLueOk2yIzrcZ08tNqVDGvqp5Za7Wu nfN1JpvvM8F8oQ/iG90wdUO3plWrplsXNt6Ve1nm5p1/8GDgOYf3NI4opZh7 TjqppLKsquu000wrzsJKK8L0DiqNvbdSwzAeDO9hrcN7XgPxww/7ka1EEk8s MZvaVswGNxdbbNE3GXejcUZbhMOROB2L41E5H5ED8sdYnCMyluiONNJI7Jas rkkmn+Euyme+o3LKKecRL0sst8xSnvK+lAc9McMMU0MzU5Mrzbnim0+kvOzj Cz/A9DOsTv/+C2oxowbks8Dp/pxqwcuyatBB8P88+yy0tCaskC2IMtzQQw9D pBRFS1NksbYXN52x0xpzzLE44XgkTrlSg0R1SFWLdA5JV5mEVUpZraySSi5v 7RLM8sbk9UxfH31vI9bie82uj4rVizbbYMxttzl1I+ym3w4TDkCfistTOT6b KzA6yagDdMkFoSz0uwetHMus8hYlM731SoNUQw7nZe21ekWs1ER9UVSxX01h 3BRgT28kGNQdD0b1R4VZVTW6VpNsUkknZ+Xuu4pppRVXjXX1kkxePS4z3kjp nddefPG91F+VA+b0U099KzhmUmc+VUiGH3YV4lh3pphcizG2VUuOwfy4V5Hl lZRkSlEG8VJ+M10ZYIH/P70RZoNp7jFhrVflGmeIJX6y54trvTLojTseGmSj fRWZ5ElPzldlFlme+mWXaYw5VIR31PZmrnOemOdYyZ2V7FqxRDvxoj1m+0x8 Onycw8j9wQfEyj/0B8TMSdw88xIzV1GbFUUP3UVtTEf9xtNVH1UbHl0nbhsg ZVeOdtlnJ7Ka3HM/sprem/QdyuB9r7gaKo2fMh8qlceSeeWzVN5LfL6cXnox Hw8Te0g5RNptuOFOGWqoWfYtRqoNvnrvrG3uOkmvAR+8ScLnNzxjoRNPu2gN Q9bw8cj9r9zkAkg5zXmucwYEnT9Et8DRKVCBqDvd6iI4QeK4zoKv24brbHe7 /9vVjoO7053vhkQ84hmJhMMjXj6Cp0IWIu95L2zeC6mXj+lVj4Y31B4AH4e0 7iXNZEsr0YhWRCK59YtuLirf3fJGMFGpj29+YxjgdDYxKGFnflL6meGwVDYv IS5/amOcmPqnwwGWkYCVQ2Aa1Si6zDHQjQ+cYBwnmEE6XvCCH8RjHnUnuxBu o48hPGEgU2g8QraQhTJEZCKnp7wa4hCHZPTfGCUHOctV8kOX8xznGhi6TUaw Raf7JI0kOEocwe50GKwgjza4uxGysoSvFCHxsIPCKLnQlsdbHvRmKL1d+i97 18MQJCn3uDMWc4BqRKbn3ujG08FRjnKsYzTvmEc87v/Rj9f8ox8FKUgV+s6Q hSxkIsX5vEaWk4aPOycAJem/SUrOkgS8ZAE5OU8HztOT9zydb0jJOtWhko6x UyWRZNdKgvquVbFEKPBquVDh4XJKt0zeLm/IS4r60qI7BKAxNZo5NCbTo210 4DJDCk07SvN2GqRmSjmYTZZq84TfhKnyjDdOmpLTkeasISR1qFEzdrSjBmRj SIXKzGcW9ZQRNOk0UbrS27X0jwbdJjfBCdOZHlKGi7xpVnWqw3/474xdNeY/ OGpAsaaxrEAtqxv/scy1HjWDa5UmXJf6jzzSFY92/eM/WKpXqPqOr+DU6zf/ IdMXDhaRhn0hPgxbzq7etKv/W/VqTzdKQJCCVKTLNGocM+jWkpZUdii1plOx 2deobpOqMbUqVnGq1XSSsauvVWxsX+uP2YrVtrTF7W11m1vaasO2vgXuWoUb XOIO17i+3QZdlZtc5i7Xuc1NbjWUK13q6tW61cXuda2bj+0O1rvcBe93xRte 7iq2vLBFr2x3Kln2eu6nyoTvZYfazGdutrNJPakem4pN/rKUtCQ87VTDadXE 2nS1OEWn/9K7YMXStsG7hTBvfzvh3h7XwsUtbnKR+1wOQ5fD2QWxdkNcXe5K l7zjRXF4zfva86o3vcRUcE/BWkawjrW38V3rUHOs1me21Y5yrSOQNQhXPspO r/09/3Jen0pdbxIvsIAVcGAJW14DN5axOH1sjBfs4Ah3WcJf1q1vK1xhDBtX wx1Gs4fVjGbpRlfEby5xiuV8YjqLd8V3ZnCeXfzgB4M5t2K+cKDLPGgzC/fM Hm6zdd084jczmtFxrvOJ8bxnPVeay372cqb/PGFCb3jDawZ1mtk8XVI72rsm nnOqI+3dSVea0pS+dG03TWZB17rTFj60cxO960b32tSmhnR3VcxqV+f5H689 Nm2TfWzbLtvZzYa2sqPNbGlXm9m+PTa2hXvs5HKb2d1WrrfFHW5yg9vczJbu sdNt3WNzt93Mdrd33z1vedc73veGd76P/Wr0xprPmqawcPBpfWuCK9fTom4u r928aF/3OtioRvWqzzvxYrv42da+OLU1nnGOTzvb1wb5uM8t8m+XnOQnLze6 9W3vleOb3i5n+cuZrdh9F9vftu1zwAG9c07b2ucHz/WnSb3whv8azt2FOIrx TPFW85vZT4d61KU+dapX3epXx3rWtb51rnc96zRHNrTBjnGPl13a2j57yLe9 dm2PPOUodzu41z13lat75euGed5bPvOVgx3sXgd84AU/eMIX3vB+33jYpT32 xKf92WhXu+PJ3Xa1g5vyKF+33E3Obs7jve719rzMa05vsMe79Hw3fOpVv3rW t57qAQEAOw== }] set ::he::dialog::colordialog(img_v) [image create photo -data { R0lGODlhCgBlAPcAAP////z8/Pr6+vf39/X19fLy8vDw8O3t7evr6+jo6Obm 5uPj4+Dg4N7e3tvb29nZ2dbW1tTU1NHR0c/Pz8zMzMnJycfHx8TExMLCwr+/ v729vbq6uri4uLW1tbOzs7CwsK2traurq6ioqKampqOjo6GhoZ6enpycnJmZ mZaWlpSUlJGRkY+Pj4yMjIqKioeHh4WFhYKCgoCAgH19fXp6enh4eHV1dXNz c3BwcG5ubmtra2lpaWZmZmNjY2FhYV5eXlxcXFlZWVdXV1RUVFJSUk9PT01N TUpKSkdHR0VFRUJCQkBAQD09PTs7Ozg4ODY2NjMzMzAwMC4uLisrKykpKSYm JiQkJCEhIR8fHxwcHBoaGhcXFxQUFBISEg8PDw0NDQoKCggICAUFBQMDAwAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAACwAAAAACgBlAAAI/wABCBxIMIDBgwgFKFzIcIDD hxAJSJxIsYDFixgNaNzI8YDHjyARiBxJMoHJkygVqFzJcoHLlzAZyJxJs4HN mzgd6NzJ84HPn0AhCB1KNILRo0glKF3KdILTp1ApSJ1KtYLVq1gtaN3K9YLX r2AxiB1LNoPZs2g1qF3LdoPbt3A5yJ1Lt4Pdu3g96N3L94Pfv4BBCB5MOITh w4hFKF7MeITjx5BJSJ5MuYTly5hNaN7M+YTnz6BRiB5NOoXp06hVqF7NeoXr 17BZyJ5Nu4Xt27hd6N7N+4Xv38BhCB9OPIbx48hlKF/OfIbz59BpSJ9OvYb1 69htaN/O/Yb37+BxiN0fTz6H+fPodahfz36H+/fwecifT7+H/fv4fejfz/+H //8AAiHggAQGYeCBCAqh4IIMDuHggxASIeGEFBZh4YUYGqHhhhwe4eGHICIh 4ogkJmHiiSgqoeKKLC7h4oswMiHjjDQ2YeONODqh4448PuHjj0BCIeSQREZh 5JFISqHkkkxO4eSTUFIh5ZRUVmHllVhaoeWWXF7h5ZdgYiHmmGRmYeaZaGqh 5ppsbuHmm3ByIeecdHZh5514eqHnnnx+4eefgIIh6KCEhmHooYiKoeiijI7h 6KOQkiHppJQGBAA7 }] # Their is no way to get the color to a known colorname from inside tcl/tk proc ::he::dialog::colorname2color {colorname} { variable colors regsub -all -- {\s} $colorname {} colorname set colorname [string tolower $colorname] if {[info exists colors($colorname)]} { return $colors($colorname) } return } array set ::he::dialog::colors " aliceblue #f0f8ff antiquewhite #faebd7 antiquewhite1 #ffefdb antiquewhite2 #eedfcc antiquewhite3 #cdc0b0 antiquewhite4 #8b8378 aquamarine #7fffd4 aquamarine1 #7fffd4 aquamarine2 #76eec6 aquamarine3 #66cdaa aquamarine4 #458b74 azure #f0ffff azure1 #f0ffff azure2 #e0eeee azure3 #c1cdcd azure4 #838b8b beige #f5f5dc bisque #ffe4c4 bisque1 #ffe4c4 bisque2 #eed5b7 bisque3 #cdb79e bisque4 #8b7d6b black #000000 blanchedalmond #ffebcd blue #0000ff blue1 #0000ff blue2 #0000ee blue3 #0000cd blue4 #00008b blueviolet #8a2be2 brown #a52a2a brown1 #ff4040 brown2 #ee3b3b brown3 #cd3333 brown4 #8b2323 burlywood #deb887 burlywood1 #ffd39b burlywood2 #eec591 burlywood3 #cdaa7d burlywood4 #8b7355 cadetblue #5f9ea0 cadetblue1 #98f5ff cadetblue2 #8ee5ee cadetblue3 #7ac5cd cadetblue4 #53868b chartreuse #7fff00 chartreuse1 #7fff00 chartreuse2 #76ee00 chartreuse3 #66cd00 chartreuse4 #458b00 chocolate #d2691e chocolate1 #ff7f24 chocolate2 #ee7621 chocolate3 #cd661d chocolate4 #8b4513 coral #ff7f50 coral1 #ff7256 coral2 #ee6a50 coral3 #cd5b45 coral4 #8b3e2f cornflowerblue #6495ed cornsilk #fff8dc cornsilk1 #fff8dc cornsilk2 #eee8cd cornsilk3 #cdc8b1 cornsilk4 #8b8878 cyan #00ffff cyan1 #00ffff cyan2 #00eeee cyan3 #00cdcd cyan4 #008b8b darkblue #00008b darkcyan #008b8b darkgoldenrod #b8860b darkgoldenrod1 #ffb90f darkgoldenrod2 #eead0e darkgoldenrod3 #cd950c darkgoldenrod4 #8b6508 darkgray #a9a9a9 darkgreen #006400 darkgrey #a9a9a9 darkkhaki #bdb76b darkmagenta #8b008b darkolivegreen #556b2f darkolivegreen1 #caff70 darkolivegreen2 #bcee68 darkolivegreen3 #a2cd5a darkolivegreen4 #6e8b3d darkorange #ff8c00 darkorange1 #ff7f00 darkorange2 #ee7600 darkorange3 #cd6600 darkorange4 #8b4500 darkorchid #9932cc darkorchid1 #bf3eff darkorchid2 #b23aee darkorchid3 #9a32cd darkorchid4 #68228b darkred #8b0000 darksalmon #e9967a darkseagreen #8fbc8f darkseagreen1 #c1ffc1 darkseagreen2 #b4eeb4 darkseagreen3 #9bcd9b darkseagreen4 #698b69 darkslateblue #483d8b darkslategray #2f4f4f darkslategray1 #97ffff darkslategray2 #8deeee darkslategray3 #79cdcd darkslategray4 #528b8b darkslategrey #2f4f4f darkturquoise #00ced1 darkviolet #9400d3 deeppink #ff1493 deeppink1 #ff1493 deeppink2 #ee1289 deeppink3 #cd1076 deeppink4 #8b0a50 deepskyblue #00bfff deepskyblue1 #00bfff deepskyblue2 #00b2ee deepskyblue3 #009acd deepskyblue4 #00688b dimgray #696969 dimgrey #696969 dodgerblue #1e90ff dodgerblue1 #1e90ff dodgerblue2 #1c86ee dodgerblue3 #1874cd dodgerblue4 #104e8b firebrick #b22222 firebrick1 #ff3030 firebrick2 #ee2c2c firebrick3 #cd2626 firebrick4 #8b1a1a floralwhite #fffaf0 forestgreen #228b22 gainsboro #dcdcdc ghostwhite #f8f8ff gold #ffd700 gold1 #ffd700 gold2 #eec900 gold3 #cdad00 gold4 #8b7500 goldenrod #daa520 goldenrod1 #ffc125 goldenrod2 #eeb422 goldenrod3 #cd9b1d goldenrod4 #8b6914 gray #bebebe gray0 #000000 gray1 #030303 gray10 #1a1a1a gray100 #ffffff gray11 #1c1c1c gray12 #1f1f1f gray13 #212121 gray14 #242424 gray15 #262626 gray16 #292929 gray17 #2b2b2b gray18 #2e2e2e gray19 #303030 gray2 #050505 gray20 #333333 gray21 #363636 gray22 #383838 gray23 #3b3b3b gray24 #3d3d3d gray25 #404040 gray26 #424242 gray27 #454545 gray28 #474747 gray29 #4a4a4a gray3 #080808 gray30 #4d4d4d gray31 #4f4f4f gray32 #525252 gray33 #545454 gray34 #575757 gray35 #595959 gray36 #5c5c5c gray37 #5e5e5e gray38 #616161 gray39 #636363 gray4 #0a0a0a gray40 #666666 gray41 #696969 gray42 #6b6b6b gray43 #6e6e6e gray44 #707070 gray45 #737373 gray46 #757575 gray47 #787878 gray48 #7a7a7a gray49 #7d7d7d gray5 #0d0d0d gray50 #7f7f7f gray51 #828282 gray52 #858585 gray53 #878787 gray54 #8a8a8a gray55 #8c8c8c gray56 #8f8f8f gray57 #919191 gray58 #949494 gray59 #969696 gray6 #0f0f0f gray60 #999999 gray61 #9c9c9c gray62 #9e9e9e gray63 #a1a1a1 gray64 #a3a3a3 gray65 #a6a6a6 gray66 #a8a8a8 gray67 #ababab gray68 #adadad gray69 #b0b0b0 gray7 #121212 gray70 #b3b3b3 gray71 #b5b5b5 gray72 #b8b8b8 gray73 #bababa gray74 #bdbdbd gray75 #bfbfbf gray76 #c2c2c2 gray77 #c4c4c4 gray78 #c7c7c7 gray79 #c9c9c9 gray8 #141414 gray80 #cccccc gray81 #cfcfcf gray82 #d1d1d1 gray83 #d4d4d4 gray84 #d6d6d6 gray85 #d9d9d9 gray86 #dbdbdb gray87 #dedede gray88 #e0e0e0 gray89 #e3e3e3 gray9 #171717 gray90 #e5e5e5 gray91 #e8e8e8 gray92 #ebebeb gray93 #ededed gray94 #f0f0f0 gray95 #f2f2f2 gray96 #f5f5f5 gray97 #f7f7f7 gray98 #fafafa gray99 #fcfcfc green #00ff00 green1 #00ff00 green2 #00ee00 green3 #00cd00 green4 #008b00 greenyellow #adff2f grey #bebebe grey0 #000000 grey1 #030303 grey10 #1a1a1a grey100 #ffffff grey11 #1c1c1c grey12 #1f1f1f grey13 #212121 grey14 #242424 grey15 #262626 grey16 #292929 grey17 #2b2b2b grey18 #2e2e2e grey19 #303030 grey2 #050505 grey20 #333333 grey21 #363636 grey22 #383838 grey23 #3b3b3b grey24 #3d3d3d grey25 #404040 grey26 #424242 grey27 #454545 grey28 #474747 grey29 #4a4a4a grey3 #080808 grey30 #4d4d4d grey31 #4f4f4f grey32 #525252 grey33 #545454 grey34 #575757 grey35 #595959 grey36 #5c5c5c grey37 #5e5e5e grey38 #616161 grey39 #636363 grey4 #0a0a0a grey40 #666666 grey41 #696969 grey42 #6b6b6b grey43 #6e6e6e grey44 #707070 grey45 #737373 grey46 #757575 grey47 #787878 grey48 #7a7a7a grey49 #7d7d7d grey5 #0d0d0d grey50 #7f7f7f grey51 #828282 grey52 #858585 grey53 #878787 grey54 #8a8a8a grey55 #8c8c8c grey56 #8f8f8f grey57 #919191 grey58 #949494 grey59 #969696 grey6 #0f0f0f grey60 #999999 grey61 #9c9c9c grey62 #9e9e9e grey63 #a1a1a1 grey64 #a3a3a3 grey65 #a6a6a6 grey66 #a8a8a8 grey67 #ababab grey68 #adadad grey69 #b0b0b0 grey7 #121212 grey70 #b3b3b3 grey71 #b5b5b5 grey72 #b8b8b8 grey73 #bababa grey74 #bdbdbd grey75 #bfbfbf grey76 #c2c2c2 grey77 #c4c4c4 grey78 #c7c7c7 grey79 #c9c9c9 grey8 #141414 grey80 #cccccc grey81 #cfcfcf grey82 #d1d1d1 grey83 #d4d4d4 grey84 #d6d6d6 grey85 #d9d9d9 grey86 #dbdbdb grey87 #dedede grey88 #e0e0e0 grey89 #e3e3e3 grey9 #171717 grey90 #e5e5e5 grey91 #e8e8e8 grey92 #ebebeb grey93 #ededed grey94 #f0f0f0 grey95 #f2f2f2 grey96 #f5f5f5 grey97 #f7f7f7 grey98 #fafafa grey99 #fcfcfc honeydew #f0fff0 honeydew1 #f0fff0 honeydew2 #e0eee0 honeydew3 #c1cdc1 honeydew4 #838b83 hotpink #ff69b4 hotpink1 #ff6eb4 hotpink2 #ee6aa7 hotpink3 #cd6090 hotpink4 #8b3a62 indianred #cd5c5c indianred1 #ff6a6a indianred2 #ee6363 indianred3 #cd5555 indianred4 #8b3a3a ivory #fffff0 ivory1 #fffff0 ivory2 #eeeee0 ivory3 #cdcdc1 ivory4 #8b8b83 khaki #f0e68c khaki1 #fff68f khaki2 #eee685 khaki3 #cdc673 khaki4 #8b864e lavender #e6e6fa lavenderblush #fff0f5 lavenderblush1 #fff0f5 lavenderblush2 #eee0e5 lavenderblush3 #cdc1c5 lavenderblush4 #8b8386 lawngreen #7cfc00 lemonchiffon #fffacd lemonchiffon1 #fffacd lemonchiffon2 #eee9bf lemonchiffon3 #cdc9a5 lemonchiffon4 #8b8970 lightblue #add8e6 lightblue1 #bfefff lightblue2 #b2dfee lightblue3 #9ac0cd lightblue4 #68838b lightcoral #f08080 lightcyan #e0ffff lightcyan1 #e0ffff lightcyan2 #d1eeee lightcyan3 #b4cdcd lightcyan4 #7a8b8b lightgoldenrod #eedd82 lightgoldenrod1 #ffec8b lightgoldenrod2 #eedc82 lightgoldenrod3 #cdbe70 lightgoldenrod4 #8b814c lightgoldenrodyellow #fafad2 lightgray #d3d3d3 lightgreen #90ee90 lightgrey #d3d3d3 lightpink #ffb6c1 lightpink1 #ffaeb9 lightpink2 #eea2ad lightpink3 #cd8c95 lightpink4 #8b5f65 lightsalmon #ffa07a lightsalmon1 #ffa07a lightsalmon2 #ee9572 lightsalmon3 #cd8162 lightsalmon4 #8b5742 lightseagreen #20b2aa lightskyblue #87cefa lightskyblue1 #b0e2ff lightskyblue2 #a4d3ee lightskyblue3 #8db6cd lightskyblue4 #607b8b lightslateblue #8470ff lightslategray #778899 lightslategrey #778899 lightsteelblue #b0c4de lightsteelblue1 #cae1ff lightsteelblue2 #bcd2ee lightsteelblue3 #a2b5cd lightsteelblue4 #6e7b8b lightyellow #ffffe0 lightyellow1 #ffffe0 lightyellow2 #eeeed1 lightyellow3 #cdcdb4 lightyellow4 #8b8b7a limegreen #32cd32 linen #faf0e6 magenta #ff00ff magenta1 #ff00ff magenta2 #ee00ee magenta3 #cd00cd magenta4 #8b008b maroon #b03060 maroon1 #ff34b3 maroon2 #ee30a7 maroon3 #cd2990 maroon4 #8b1c62 mediumaquamarine #66cdaa mediumblue #0000cd mediumorchid #ba55d3 mediumorchid1 #e066ff mediumorchid2 #d15fee mediumorchid3 #b452cd mediumorchid4 #7a378b mediumpurple #9370db mediumpurple1 #ab82ff mediumpurple2 #9f79ee mediumpurple3 #8968cd mediumpurple4 #5d478b mediumseagreen #3cb371 mediumslateblue #7b68ee mediumspringgreen #00fa9a mediumturquoise #48d1cc mediumvioletred #c71585 midnightblue #191970 mintcream #f5fffa mistyrose #ffe4e1 mistyrose1 #ffe4e1 mistyrose2 #eed5d2 mistyrose3 #cdb7b5 mistyrose4 #8b7d7b moccasin #ffe4b5 navajowhite #ffdead navajowhite1 #ffdead navajowhite2 #eecfa1 navajowhite3 #cdb38b navajowhite4 #8b795e navy #000080 navyblue #000080 oldlace #fdf5e6 olivedrab #6b8e23 olivedrab1 #c0ff3e olivedrab2 #b3ee3a olivedrab3 #9acd32 olivedrab4 #698b22 orange #ffa500 orange1 #ffa500 orange2 #ee9a00 orange3 #cd8500 orange4 #8b5a00 orangered #ff4500 orangered1 #ff4500 orangered2 #ee4000 orangered3 #cd3700 orangered4 #8b2500 orchid #da70d6 orchid1 #ff83fa orchid2 #ee7ae9 orchid3 #cd69c9 orchid4 #8b4789 palegoldenrod #eee8aa palegreen #98fb98 palegreen1 #9aff9a palegreen2 #90ee90 palegreen3 #7ccd7c palegreen4 #548b54 paleturquoise #afeeee paleturquoise1 #bbffff paleturquoise2 #aeeeee paleturquoise3 #96cdcd paleturquoise4 #668b8b palevioletred #db7093 palevioletred1 #ff82ab palevioletred2 #ee799f palevioletred3 #cd687f palevioletred4 #8b475d papayawhip #ffefd5 peachpuff #ffdab9 peachpuff1 #ffdab9 peachpuff2 #eecbad peachpuff3 #cdaf95 peachpuff4 #8b7765 peru #cd853f pink #ffc0cb pink1 #ffb5c5 pink2 #eea9b8 pink3 #cd919e pink4 #8b636c plum #dda0dd plum1 #ffbbff plum2 #eeaeee plum3 #cd96cd plum4 #8b668b powderblue #b0e0e6 purple #a020f0 purple1 #9b30ff purple2 #912cee purple3 #7d26cd purple4 #551a8b red #ff0000 red1 #ff0000 red2 #ee0000 red3 #cd0000 red4 #8b0000 rosybrown #bc8f8f rosybrown1 #ffc1c1 rosybrown2 #eeb4b4 rosybrown3 #cd9b9b rosybrown4 #8b6969 royalblue #4169e1 royalblue1 #4876ff royalblue2 #436eee royalblue3 #3a5fcd royalblue4 #27408b saddlebrown #8b4513 salmon #fa8072 salmon1 #ff8c69 salmon2 #ee8262 salmon3 #cd7054 salmon4 #8b4c39 sandybrown #f4a460 seagreen #2e8b57 seagreen1 #54ff9f seagreen2 #4eee94 seagreen3 #43cd80 seagreen4 #2e8b57 seashell #fff5ee seashell1 #fff5ee seashell2 #eee5de seashell3 #cdc5bf seashell4 #8b8682 sienna #a0522d sienna1 #ff8247 sienna2 #ee7942 sienna3 #cd6839 sienna4 #8b4726 skyblue #87ceeb skyblue1 #87ceff skyblue2 #7ec0ee skyblue3 #6ca6cd skyblue4 #4a708b slateblue #6a5acd slateblue1 #836fff slateblue2 #7a67ee slateblue3 #6959cd slateblue4 #473c8b slategray #708090 slategray1 #c6e2ff slategray2 #b9d3ee slategray3 #9fb6cd slategray4 #6c7b8b slategrey #708090 snow #fffafa snow1 #fffafa snow2 #eee9e9 snow3 #cdc9c9 snow4 #8b8989 springgreen #00ff7f springgreen1 #00ff7f springgreen2 #00ee76 springgreen3 #00cd66 springgreen4 #008b45 steelblue #4682b4 steelblue1 #63b8ff steelblue2 #5cacee steelblue3 #4f94cd steelblue4 #36648b tan #d2b48c tan1 #ffa54f tan2 #ee9a49 tan3 #cd853f tan4 #8b5a2b thistle #d8bfd8 thistle1 #ffe1ff thistle2 #eed2ee thistle3 #cdb5cd thistle4 #8b7b8b tomato #ff6347 tomato1 #ff6347 tomato2 #ee5c42 tomato3 #cd4f39 tomato4 #8b3626 turquoise #40e0d0 turquoise1 #00f5ff turquoise2 #00e5ee turquoise3 #00c5cd turquoise4 #00868b violet #ee82ee violetred #d02090 violetred1 #ff3e96 violetred2 #ee3a8c violetred3 #cd3278 violetred4 #8b2252 wheat #f5deb3 wheat1 #ffe7ba wheat2 #eed8ae wheat3 #cdba96 wheat4 #8b7e66 white #ffffff whitesmoke #f5f5f5 yellow #ffff00 yellow1 #ffff00 yellow2 #eeee00 yellow3 #cdcd00 yellow4 #8b8b00 yellowgreen #9acd32 "