Retournement vertical d'une image avec pixane

 

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


Catégorie exemple