if [catch {package require pixane}] {
package require Img
interp alias {} mkphoto {} image create photo -file
} else {
interp alias {} mkphoto {} piximg
}
namespace eval imgview {
variable factor 1.0
variable types {*.gif *.jpg *.png *.xbm *.xpm}
proc openImg {w {fn ""}} {
variable files; variable types
variable im1; variable dir
if {$fn eq ""} {
set fn [tk_getOpenFile -filetypes [list [list "All files" $types]]]
if {$fn ne ""} {
set dir [file dirname $fn]
set files [lsort [eval glob -dir [list $dir] -nocomplain $types]]
}
}
if {$fn ne ""} {
wm title $w [file tail $fn]
catch {image delete $im1}
set im1 [mkphoto $fn]
scale $w.c
list [file size $fn] bytes, [image width $im1]x[image height $im1]
}
}
proc scale {w {n 1}} {
variable im1; variable im2; variable factor
set factor [expr {$factor*$n}]
$w delete img
catch {image delete $im2}
set im2 [image create photo]
if {$factor >= 1} {
set f [expr int($factor)]
$im2 copy $im1 -zoom $f $f
} else {
set f [expr round(1./$factor)]
$im2 copy $im1 -subsample $f $f
}
$w create image 1 1 -image $im2 -anchor nw -tag img
$w config -scrollregion [$w bbox all]
}
proc step {w fwd} {
variable files; variable dir
if ![info exists files] {
set files [lsort [eval glob -nocomplain -dir [list $dir] $types]]
}
if $fwd {
set first [lindex $files 0]
set files [concat [lrange $files 1 end] [list $first]]
} else {
set first [lindex $files end]
set files [concat [list $first] [lrange $files 0 end-1]]
}
openImg $w $first
}
}#------ exported proc proc imgview {{filename ""}} {
set w .iv
if ![winfo exists $w] {
toplevel $w
wm geometry $w 240x268
frame $w.f
button $w.f.open -text ... -command "imgview::openImg $w.c"
button $w.f.+ -text + -command "imgview::scale $w.c 2"
label $w.f.f -textvar imgview::factor -width 5 -bg white
button $w.f.- -text " - " -command "imgview::scale $w.c 0.5"
button $w.f.< -text < -command "imgview::step $w 0"
button $w.f.> -text > -command "imgview::step $w 1"
label $w.f.info -textvar info
eval pack [winfo children $w.f] -side left -fill y
canvas $w.c -xscrollcommand "$w.x set" -yscrollcommand "$w.y set"
scrollbar $w.x -ori hori -command "$w.c xview"
scrollbar $w.y -ori vert -command "$w.c yview"
grid $w.f - -sticky ew
grid $w.c $w.y -sticky news
grid $w.x -sticky ew
grid rowconfig $w 1 -weight 1
grid columnconfig $w 0 -weight 1
bind $w <Up> "imgview::scale $w.c 2"
bind $w <Down> "imgview::scale $w.c 0.5"
}
imgview::openImg $w $filename
wm deiconify $w; focus -force $w
}
if {[file tail [info script]] eq [file tail $argv0]} {
wm withdraw .
imgview
bind all <Escape> {exec wish $argv0 &; exit}
}Category Development - Category Graphics

