Exemple de retournement vertical d'une image avec pixane, donné par Eric Hassold sur fr.comp.lang.tcl :
package require pixane
# Revert in place image
proc revert {p {dest ""}} {
if {$dest eq "" || $dest eq $p} {
# In place
set inplace 1
set tmp [pixane create]
pixane resize $tmp 1 [pixane height $p]
pixane compose $tmp replace
} else {
set inplace 0
pixane resize $dest [pixane width $p] [pixane height $p]
pixane compose $dest replace
}
pixane compose $p replace
set xsrc 0
set xdest [expr {[pixane width $p]-1}]
while {$xsrc<=$xdest} {
if {$inplace} {
if {$xsrc!=$xdest} {
# Remember scanlist at xsrc
pixane copy $tmp $p -from $xsrc 0 -to 0 0 -width 1
# Replace scanline at xsrc with scanline at xdest
pixane copy $p $p -from $xdest 0 -to $xsrc 0 -width 1
# Copy back from temporary image scanline
pixane copy $p $tmp -from 0 0 -to $xdest 0 -width 1
}
} else {
# Remember scanlist at xsrc
pixane copy $dest $p -from $xsrc 0 -to $xdest 0 -width 1
if {$xsrc!=$xdest} {
pixane copy $dest $p -from $xdest 0 -to $xsrc 0 -width 1
}
}
incr xsrc 1
incr xdest -1
}
if {$inplace} {
pixane delete $tmp
}
return
}Démonstration :
set p [pixane create] pixane load $p -file test.png # Distinct revert set q [pixane create] revert $p $q # In-place revert revert $p package require Tk pack [label .l1 -image [pixcopy $p] -bg red] pack [label .l2 -image [pixcopy $q] -bg blue]
Voir également :
Retournement horizontal d'une image avec pixane