ulis, 2003-12-01. On c.l.t, Thomas Kistner asked how to flip a canvas. Thanks to the window format of the Img package, here is an answer:
The script edit
package require Img
# create an image
image create photo _image_
for {set x 0} {$x < 128} {incr x} \
{
for {set y 0} {$y < 128} {incr y} \
{
set r [expr {$x * 2}]
set g [expr {$y * 2}]
set b [expr {$x + $y}]
set pixel [format #%02x%02x%02x $r $g $b]
_image_ put $pixel -to $x $y
}
}
# create a canvas with a text and an image
frame .f1 -bd 1 -relief ridge
canvas .f1.c -width 200 -height 150
.f1.c create text 20 2 -anchor nw -text "this is an image"
.f1.c create image 10 20 -anchor nw -image _image_
pack .f1 .f1.c
# take a snapshot of the canvas
update
image create photo _canvas_ -format window -data .f1.c
# reverse the image
set width [image width _canvas_]
set height [image height _canvas_]
image create photo _reversed_
for {set x 0} {$x < $width} {incr x} \
{
for {set y 0} {$y < $height} {incr y} \
{
set x1 [expr {$width - $x - 1}]
set pixel [eval format #%02x%02x%02x [_canvas_ get $x $y]]
_reversed_ put $pixel -to $x1 $y
}
}
# show the reversed image
frame .f2 -bd 1 -relief groove
canvas .f2.c -width 200 -height 150
.f2.c create image 2 2 -anchor nw -image _reversed_
pack .f2 .f2.c
See also edit