ulis, 2003-08-22: A little proc to adapt a gray image with transparency to a colored background.
Before:
After:
proc colorize {image color} { # get image sizes set width [image width $image] set height [image height $image] # get color's R G B lassign [winfo rgb . $color] rr gg bb # compute new colors set colors {} for {set y 0} {$y < $height} {incr y} { set row {} for {set x 0} {$x < $width} {incr x} { # save transparency lappend trans $x $y [$image transparency get $x $y] # compute the new color lassign [$image get $x $y] r g b set r [expr {round($r * $rr / 256)}] set g [expr {round($g * $gg / 256)}] set b [expr {round($b * $bb / 256)}] # append to the current row lappend row [format #%4.4x%4.4x%4.4x $r $g $b] } # append the row lappend colors $row } # set new image $image put $colors # restore transparency foreach {x y t} $trans { $image transparency set $x $y $t } }
# ========= # demo # ========= wm title . colorize # get a gray image image create photo img -file gray-image.gif # add colors colorize img azure # display set width [image width img] set height [image height img] canvas .c -width [incr width 4] -height [incr height 4] -bg beige .c create image 2 2 -anchor nw -image img pack .c