Magnifying Glass

Keith Vetter 2005-01-05 : After writing Spotlight, I realized that it would be trivial to modify it to become a magnifying glass instead.

Unlike Spotlight, this affect is much less dependent on your computer power since it can leverage built in image scaling.

Again, I've included an image for demo purposes but you can easily insert your own image by editing the script and changing what ::img::img is.

See also A little magnifying glass.

JH The treectrl package has a loupe command hidden in it that works as a C-based x-platform magnifying glass. You can see this used in tklib's widget::(screen)ruler widgets.


uniquename 2013aug18

For those readers who do not have the time/facilities/whatever to setup the code below and execute it, here are a couple of images that indicate what the following code can do.

vetter_MagnifyingGlass_wiki15239_zoom2_screenshot_322x266.jpgvetter_MagnifyingGlass_wiki15239_zoom8_screenshot_324x266.jpg

I do not have the 'Img' extension package on my computer (and have no intention of ever installing it). The sample data that Vetter provided in the code below requires the 'Img' extension.

I changed the code a little to use the earthris.gif file of the Tk demo directory (/usr/share/doc/tk8.5/examples/images/ on most Linux installations). I simply changed the 'image create photo' statement to use '-file' instead of '-data'. And I commented out the 'package require Img' statement.

The image on the left is how the GUI looks when you first bring it up on the 'earth rising over the horizon of the moon' image. For the image on the right, I moved the zoom scale to 8, and then moved the mouse-cursor over the 'blue marble' portion of the image.

The little bulge on the right side of the magnified image corresponds to Vetter's comment in the code below --- namely:

    # Bug here when xy extends past edge of image. Too lazy to fix it.

 ##+##########################################################################
 #
 # Magnify.tcl -- Aims a magnifying glass at an image
 # by Keith Vetter, January 2006
 #
 
 package require Tk
 package require Img
 
 set S(sz) 120                                    ;# Size of magnifying square
 set S(sz2) [expr {$S(sz)/2}]
 set S(zoom) 2
 set S(zsize) [expr {$S(sz)/2/$S(zoom)}]
 
 proc DoDisplay {} {
    global S
    
    wm title . "Magnifying Glass"
    canvas .c -width $S(w) -height $S(h) -highlightthickness 0
    .c create image 0 0 -image ::img::img -anchor nw
    .c create image 0 0 -image ::img::small -anchor c -tag small
    
    frame .buttons -bd 2 -relief ridge
    scale .zoom -label "Zoom" -from 2 -to 8 -showvalue 0 \
        -variable S(zoom) -orient h -command FMove -relief raised
    .zoom configure  -font "[font actual [.zoom cget -font]] -weight bold"
    option add *font [.zoom cget -font]
    button .about -text "About" -command About
    pack .c .buttons -side top -fill both -expand 1
    pack .zoom .about -side left -expand 1 -in .buttons
    .c create rect -100 -100 -100 -100 -tag box -fill {} -outline black -width 2
    
    bind .c <Motion> [list MMove %x %y]
    bind .c <Leave> [list MLeave]
    update
    MLeave
 }
 proc MLeave {} {
    .c coords box -100 -100 -100 -100
    .c coords small -1000 -1000
 }
 proc MMove {x y} {
    global S
    
    .c coords small $x $y
    
    set xy [list [expr {$x-$S(sz2)}] [expr {$y-$S(sz2)}] \
                [expr {$x+$S(sz2)}] [expr {$y+$S(sz2)}]]
    .c coords box $xy
    
    # Bug here when xy extends past edge of image. Too lazy to fix it.
    set xy [list [expr {$x-$S(zsize)}] [expr {$y-$S(zsize)}] \
                [expr {$x+$S(zsize)}] [expr {$y+$S(zsize)}]]
    catch {
        eval ::img::small copy ::img::img -from $xy -zoom $S(zoom) $S(zoom)
    }
 }
 proc FMove {args} {
    set ::S(zsize) [expr {$::S(sz)/2/$::S(zoom)}]
    .zoom config -label "Zoom: $::S(zoom)"
    
    foreach var {x y} val [.c coords small] {
        set $var [expr {int($val)}]
    }
    MMove $x $y
 }
 
 proc About {} {
    set msg "Magnifying Glass\nby Keith Vetter, January 2006"
    tk_messageBox -message $msg
 }
 ################################################################
 
 set idata {
    /9j/4AAQSkZJRgABAQEASABIAAD//gAmRmlsZSB3cml0dGVuIGJ5IEFkb2JlIFBob3Rvc2hvcKgg
    NS4y/9sAQwAcExUYFREcGBYYHx0cISlFLSkmJilUPEAyRWRYaWdiWGBfbnyehm51lndfYIq7i5aj
    qbGzsWuEwtDBrM6errGq/9sAQwEdHx8pJClRLS1RqnJgcqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq
    qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq/8AAEQgBUgHCAwEiAAIRAQMRAf/EABkAAQEBAQEB
    AAAAAAAAAAAAAAABAgMEBf/EADkQAAICAQIEBAQEBgICAgMAAAABAhEhEjEDQVFhInGBkQQTMqEU
    QlKxI2LB0eHwM/FDggWSFWNy/8QAFwEBAQEBAAAAAAAAAAAAAAAAAAECA//EABwRAQEBAQEAAwEA
    AAAAAAAAAAARASESAjFBUf/aAAwDAQACEQMRAD8A2CWE87nVGrKZTLYGhZEygUXkAgFQAUAKBAUA
    QcgUCAoAEZQEBeAABGUAZe4RaRazkDPIGqFAT1HqKoldgLZLIALYMjmBqxZmxYG7KYTNWBoGbLYF
    BLLZAAsoEIaAEIUgAhQFRkL6AIhC+g5gZIWiFEBQBgu4KUQoKABORQLZbMgDVlsyUg1ZTBbCtAli
    wigliwqgCwgWiAC0KIWwFEooAUC2QgAEKAYAGWZNkAyC1kUUQFoUBCii0BLFloUAstmSkFspkAaK
    Z9S8iCk5AAAAFAABCFIAohQBnINAI5Aoo2IWxQ5sgFIAKUAAUhSKFIUCAAItghQKCACghQqgACgl
    giKCWLKKCACkAAhCgCApKAhR6igBruZLzAoJ6gBQwQmQLYsgAtiyZAFspkbEVqxZmy2BbJYsl4At
    gy2WwLZCWAi2DOQUQpAUUhQBNigAEykCCtAzZbIKAAKUyWwKKAAAqQIJzAotAQFoAQGhQGbFloAQ
    oAAAACFAEAoAQoZAKAAKAAFCgAFCi2SwGkaQAJRGjRkCcxyLzAE9CUaJYEoFsl9wgQpAAKAMgFo0
    qFsVgV3AWLFCnuQUUKAChQKBBZRQGbKmWkSsgXV3LZKAGrLZgpBqwZLyA0CWLApCgCFoABRKKAIC
    kADkABAUgAgAAdQUAUgAtggAAgsALBALZL6DmALZLIALZCECL/cEJeQNWLMWLA1YM3/tgo1TGe5b
    LqQVkpbLgDNsqZcCsgAAALRPUAWhQFgKFCxZAAHqAA5ABzKSxYFHkQAUpkoFsWZsWBuxZjULA3gU
    Y1F1AaoUZ1F1dwKShqGoBRKLYsDINCkBlFFEAAACWPUpAJ6gV3DQRLwLBLAoszbJYg3fkSzN9haL
    Bq2SzNi+4FYJY3AvqCADYICjQIVNAPUFtFtdAqUKNWug1LoBmi0W2R5IAFDZgWhpJ7C2BqvMUZti
    33AtCiWWwLQ0omotgNIoljUAoo1DUAolFsJgShRcFvsBmuxDVi1TCMlotpbIjbAAgA0DN4FkVsGN
    RdQGmQzqJYGhijNlTVhFZKY1IXgKjRKZtR5kdrZFRmiaTa6tBp+QGNJlo6Okudmc0BmiUbqzOO5R
    KFFJ7gQUUgCvMFsAdNPdDSZ1MupsKUKYsqaAlFz0CkuhdarYgmS5GpCwKT0BQFse4royctwKPYll
    sC2ACCFoDHUBQ2Y9SAVtj0CLgCUNJcUS6Aulkpl1FAzTGTQqNdwMWxZqhS6lGbKKBAFFvpRKfVAG
    l3M4N0hSA5g3piNKLUYBvSqFeQoykXQ+wzySLb7EVlprkNVcka8yUA19QpImhdBo7BFckZcrLofQ
    ji1yAe403/2Mpi+wBw7mXE16SFMozX+0K8zTT7C2tgMNexDbV7/uRpdRRi+wNaV2AotkZrRLqvcu
    iXUoyQ0oO90XQ63QGcls1pfWJNMul+oEtdBcejLT6BJvkFTHQuC6X0LoedgM4GDWh9iaepBMdC47
    jS6zhDSuoCvMCu5VGwJ6sV3K4tchpfQCFtkotdgFvsS2Whpa3iQL8hfcU0MsoX3G/wCYaX0JpILX
    8wJSFMIvr9x6oma2JqdbAavuL8yXLYPV0YVdTJbGe6JkC2+wvyJT7Cn0QRc9RbJTrYf7sAt9GNT6
    DN4RHYF1eYsiUnyGl9AKpZGp9jLT2zYcZdwNapDUzFNCnRRvWxqZzze4SfVCDep9DLkq6Ez1sZAt
    92R+YsX2AerLgzb6DPQC2i6l0M56EvPL2A3rj1Bi/IAb1eY1dD5z+PnF0+HH3H/5D/8AUv8A7D1h
    H0tZNVs+a/8A5CV+GMY/cL46fVf/AFRPWLH0lIuo+evjm2swz1Wx1h8XF4enV0Ui58sI9eot92eZ
    8dfov1D4/wDJv1ZeI9N/7YUjy/PlmtON2YlOUk7k6+xLg9r48FhyRPxPD2T90fPcop02Jy4kVa4d
    p5vdEuLNfRfEi86l7kfEit5r0Pl3KUfptt3erJdTT8VprdVRn3i+X0vmw/V9guNHqfP+f/Jfk2h8
    /on5Nj3h519NceNbj50eUkfNfHdJ4d4w7LHjKStSSa/K4svrEmvofNj1Rl8aC3keJzTV6JLtuRcT
    rBoe/iTXrn8TL/x+FdWc/n8X9bOOuO+a8hrh1NXEmuy4/EX52+zEuNOW8qXbBx+ZH9RXJJXyfPkL
    g6fMl+uV+Z0h8ROL8XjXc82uC/PFDVGvqVC4PTP4hy+i4r7mVxpp25Nrozjqje+Rqj+oXB6X8S/y
    xXqF8Tz0Z8zz6o/qQUlya9xweh/FcTNUr7HN8Sby5yvzMY8yX5lHePHmt/F35nRcWDWpyS7Hj1eY
    1PoB24nG1Yjaic9cv1P3MW+gtgb1u71O/M6R+IkvqSkvY4ADrxOM5uknGPS9/MkeNOGzvs8o5j3A
    6/ieLdqXpWDpD4qTxL7HmGSD1/Pis6n7EfxKb+lv1o8tvqNS6r3A9D+Ib2gl6hfEfqj7HntdV7kc
    0t5FHsXF4bWGzWqPVnz3xVythcdx+n7k4Pfa60TUup4n8VxOSiu9GHx+N+slI+i5eotdT5z4/Fe/
    Ef7E+dPqvOhSPo+TB4F8RNck/LBpfE3upL1LR7L7kweX8VWNN+Zn8TLpH3Fwj24B4/xPZ+4HBjTB
    23NSW26OfE4fDjprhvO6dlfE1Wq4a/8ARMwklszjuttVwar5ST7WZSik0owafNp2Vaa8Wp+RuPAl
    KN47K8sUYjHhJp/Lc1zTZdUXiMIR79DpwptLRw+EnN51Se3qY4uvVq4kEm8WlgC/LlXgnwHXS3/Q
    6fJ+IValw/N3/Y5anOX8RPQ8NLCRZx4Uf+Hi8R3smqQGnwuI8y4vCbapfxXgzLCqXGfEly05X3EI
    wUXq0a7/ADWq9EZ4kuG5YWOquvYaNJ3hu0/YjT2ab7GbvpXYqlVbGeqY56kXw6t5X5CpN/UlZNvz
    X/60Qak0l4W0ZvtfoX5jTzXlyC4j3vBFVSWbaj3rJZNxlTmpPtky+IpPEm30Y3WX7IqOkrjmUk7X
    IxGTnKotN87dEVK7jqXK8HaXxc5RVxWMK+RZgiik8y4zvotKM8TVGT03XJXZmXEnL65J8+whKCdN
    JLfqW4iKbeywt6In0056zR0lxsf8fDbX5pKwuNySbbzUX/goxfOk12ZYu8qKXXxFlJNvXw1q72mZ
    xya9UBtxnzjh87TMRWp1Gl3cqGmUliF947exvhqSk0o6Zrk1kfYieiVJyUuqkbi+HK1Nzl6h6p2n
    KKj33T/c5JNfpk17Adq4FXGT9WZ8caUfGnzTMupN1Gm9lyMtK/FGlaTrAo3rnu9Xa0wpzzbll4bM
    NNNqGUnTaz9ywUmsQUms3zLSNLiONXqb5r/UFxJO7kkuu/8AQzFSw9Kd4yzT+bF/TJJ4wxdSK5y0
    34mr3pJGfmSrErb7IU1dwbcd1qtpeRqXGcd+B5NxVMXRFOTX1R/Ymp3me3Q3/C4q18OHLK2yc4zj
    4rqDj+V5f7CjWp1vLPOsGbT3VvzNRqeeHKpP9TaZiWN5Qb+woY/Sxa5sP5abuUW96p+wg0ttPty9
    RdC0ldrHLmS1WLflRJTjF+BybXU5ubk75sUdpUsO78yYf5X3HB4fE4sNW0e7o9HB+F40248NQwrt
    zLR5uJcFFpJNq0nk5S1N3szXEb4fGlBvKbi03ZuHwvG4vDlPhKMlFpNKWckEg5JVKvM3mvqjnlRm
    PwfxUpKMeE3Jq0lJGZpxbjOV8ROq32A3busewVy2abOCk+hpSvdL7ijpb7e4z29znaqqQv8AlLR0
    1eXuDF9XFAUaz0K6vKoNIV3Zhpl1sEl0LXdl0yW8Z11aCF0sVE0+JN/+SVbVeDMUu3qWuyCjzyS8
    lRYylF2nkml9PZinvp+4G1xuLFOuJJGXOclniSl2siUv0/dEetcvuOiot1zM3z58kWOqbemLddEB
    NKLoOkeDJfW1BvbZlXBct+LFNbpiI5aX2Gl89Pqd5zjF6Z8KLxusnKTUn4eHp7J2IouG9LfhVdzF
    d39zp8vi/Vpru2R68KT3yryBik0KS/V5s2o39UkPUgzXJbnTh8HiTeYSgt7aMrDu8+VmtU9FapU8
    lqHF4K4UblxJRf8A/Df3Myl8t6YcW084Ve4Up7a20+pK7eg0HKMnc0m/uZxuqT7inySJqaa5V0GY
    NrW7e6XNIjhFpatS5XkzraeMeav7COtNPUq3w7LBdHSTxyYquX2EoJrOb5rBmXCrebTEHT6t011Z
    VHh3u30pUccwpSfvguvC1JEg6Y2V+4UU5eJNL+V5Ob4iVJe4U75L0Q6On8LK+VrvZylTXoiTjbVP
    Vjrg5tquYbfbsUdnqh4XTXJxyYm4SXii7fOLocPiRgnq4UJXz2O8XCaqtK9MFGeHxoqEY8SEpSX5
    01dGXxG81nk+aOnyXKNxn9jLhV604rqk2idHPD+puxssW12dC4XV46qyutopaeqyQIcTSsTnGXLo
    Zko3q0JNb1sW47N+4jLRJ5j3yBiUIt3T75wI8OL5R9Zm5O/zVX6TMs7++kqNrjcSEVFJUsK0cuNx
    uNOOiXEtdI4RqO9/5Rai3UoLPoKODnKS8T1Pq8kU5JUrinvmrPU+JL5a4aXCrpopnNQi/qpd1yFI
    fC8ZcDjx4iq07zkfE6XOUsuUnqbi1WTUODcNUWpPosmaSVNOuwHHPQqre7Oz0NeFUlzb3MuGvEIx
    9GBhtd6M6ujwb+TOrST8mT5PE5xoCa5dQND7gDvi8Sx5inyyjo/iOK3apJdrMcTj8Se6jfVcNJhU
    tp5x5i+7sRktNTb7OSFeHVh+W6JBF/2V2LTWz9hpfJv1YUXbYuNs2RxdciLDINOuhMJ87G4QF1cl
    t3LbrDwZpinQFqvzZFeRP9oauy9wLeOYt9Wa4cHxMpxS28TpMk18q9fshNGazsa8ySvtXIl5A1jO
    cIq9zm88kaTrGANNvcl75JdvYJrnYGk83gmCY5seEC/uW+y9DLddKIppbvD2A0utBpPsS09mKfTD
    wu4CujRKrk2b+XxNOrRjrZjVmmnZRdUqz98nTUpcNwpJ+SZzWR6+gsQTUcR4jUebovEm5RUXbS2b
    M1joPIUTNbYDVrZ+dGZKTeJFUXVt58wI0trx5FvSmq9S5535mZdbi33LUdOHxVq0pKC5bs9CalVy
    i+63PEm1+Sjs3KMVGS4U+7d12LR6ZxU61Qd9Vv8AY4P4Ram4zrnTOanOK0pxa75K/iOIl9PDVcow
    oVXSXBcnbjwnz+ozpraEMe33Hz+JJfQo30WSfOmvrbklurJcIktN3KMI+u/kRSco4xfNPc7RnwJ2
    1L5bWXe3+ThOMLuLj5rCfoNRalX1IVyx6MlP/smef7mVMX0Ja5xaa5N2He9fazNmsR108NrVD+HN
    LvTNcODlw25Rmq/Oqf2OcG4yUoq2uTVk1OLt2n12FFb5YkS3f056FfDrxKOqPZ0Gv0Ntb1J3Qgmq
    LxVNdC6Y1bmvvZFbVte1MallU231dBW1PiVuDPg6P3YA2uDxXn5csd0Fw53/AMc36D8RPrHz0ml8
    VNcoNeQ4C4c0tUoxjFbuTMXJy8MXV4dHf8WmlmaaW1GJ/FcSSahLTHpu36jgxw5QUn8yMne/RHSb
    +HyoxjNvm00jzJtbFqTe2ewGotKVz4cWukXR3XG4Oz4Dz1lZ5cXVNrsiqK5xa7geqvhp3+VdNjHy
    +En4eMnXLS2zgpK92bcb2k35LAFVqeJtp/ylkoY0y4j80jNtZ0zbXM3DicP5UpcT4ecqdOVtRAmO
    aJTvBmXG4cpXGFLag4trlnvRINOCbSbUa6sy4zb8Mk+7ZFwm2qcc4eTtw+DxFFpQ4PEb6yT0lg5K
    47yXpkqae2TU+Go5VwadUrr0s55TrfrRIOkYxcknhc2zUeFObSjw34tnWGcYt6k/sSScZXUtPIcH
    SfDcG1JGovgabl8zV2ZzXEcY6c10ZNTT+oDbfCcqjOSjyvc0ocPNuTxjNf0Oeq+nojS8S/Mv2A68
    OXBpaoU9nJ3Kg/iJL/ji1ir02v2OVZdPD5FjOaT0OUetOhRJ8Rz+qUn3Im3TV2uZXLxZWWRy5gSs
    3L98iMU34nKv5UmWLTy3pXVZO/4XjQUeLDhrjcN7OOb9BgxxPh3CKlGWtPdVlexxdRl4lT74Ov4i
    SWXlbcq7GYcV1UWmtmmrLwZq+nob4qhDhxcd3h+O79ORh5bwkn0MqOcr02ZAUk9sDV3OrnGtMIRU
    eV7ruYcpc2ATT3bLFpJpN099jmqbtM1hc2EbpXfPzMUt6yW8cyqTqs+pFZSXZ+o8T3pepW2939gi
    jPiWdeelFbnz9y/f1Dja5Ac2n2KtSyn6WdPlvlkzod7CiqUt/CNV50p90yafPyozVeRJg1JrbayO
    ueR6fYl+RR2/CyfDc1ODXRO2cnFaVV97EZNJpWr3oiVbSoqNa5aVFNJIeJbP7mb835IN4y/sB0tt
    +JW+rJO4uk0nzTObvkzLn+rPctHdRtJ6H6MHLU/1MCjXZ1ZNXJ0KW7sdaJFWsKvCvMXGLzZmucka
    vsvQguq8xiZUrdNV3Y3ErV8/JgW3F4VP2YtXmPqZTbeROMuSdAb1xTt36HRcKXFzCo4/MzzXF+56
    YxqCldSb3exZhXWScHUJ8Sq+pqr/AMGVPicNN6313x7czpqjOUFJvhyX6l/QPhwm1Fx32a5mhxm4
    ceWqfh4jedKpMw/h3FalK4batPPoTiRhCbilJNbqT2ZtfEJ4f2ZKOcW/CtKajs7o6R4HElFNKr2b
    kqODu2VWnsKOjcoPQ9SfSTtG5wj8vU5wb2ajPP33Rxt1umn2LFpPYlHWcOGpx0vEl3x77nOb0Taj
    t1qjo+P4NKVLvkkuDNRU1LXF9N0XcGdeuVNV3QcFylfmjN1yi152FNp+FU35mRtRdf1RiqlVuzVT
    1U5JXzbwV8KENppS6VsOiKLq2sLmVbrLRn6X9We25rEmq4mf5lX3JujcZcOKalHVb5ujLjw5bSab
    2TyjFvOxi2t37jo78PhL5n8bUoP9J6eNxPwcox4KTuNrN6TxanVXixqXWu5aOs/iuPN3KmnypJex
    z+ZKU7mlJ9GqoNq8GXq3dCi78qfYd3p6NcyZ/wACr7AVwjWNV9bx7EWGtnklXtkuh3sBvjcRcSSf
    hpKrUUjnSb2SLlLKGGBnT3wNtpHSpSjajhc0RXJ1ddQMantk0j2Q+BjPhqUPik7zWj/Nnm43CfBl
    olKLfYQZT7LzJLS1uZ1tPYrvZrS+jQgqWMNtmv4iX0uu25zrnbCre8+Qg1qfYmtPDQ1S1L92VRg+
    JXFVRfOCrIzA8PcNRaw7Ziaip1HVXfc1OKSwotdUWBoXdE0vlkznNqvMqb/yTo0r5q0Rt7rBLb7l
    3X9QJ5ik90mHFdXRKV4CNeHowLfVgC4e1kqjUk1zwZpypRz07lUxtyHh6s0uDNq5rSuu5r8M3KKj
    J55v9xBhOCTw/Nsza3TdcrOr4EYNqfE9lhiXD4UYxqbk+auxByhUnvXc3Ti3eUjbknhQqiSTW6Qo
    zppeGKz2NKelVJ5bz3M02shSrGleqJRtuMpqatPmmztwJ8SOJKco7NpZXqeRSb5I3D5mrwLxdnRa
    PRxuHHiylabmnWrn7Hl4nBlw5K2mn+ZHo4XzVJPicWlvV5PRbeVCE097V2ij5yttWbx0yeni8DhS
    ypx4cuqVpnm0SSvWn2RnVhSvmiNK+pqPDcn9Wk2+DFWpSla6GbCOUU6bD3uq7o1NJLd4MWm/ItRt
    8Wbq3rrC1ZI3JprwxT3EZL1/YVGTw7vmX0sZUUnd55B3zk6e5tRTpSrzZjTnGfIlFVc+fMqlFUpR
    fmmYqVYNpJJfcv2jcVpXgk66TRW46U9K1bNf7uc2pXmkyxcsrXh8k7JFFGN7NIulLeMvMuqdU5Jp
    dciOqrbaXcl0jNqsJmc8mak46sqkFGKzTl2UqKjO4pf6zquLw1j8PHHU5ykpSbUVFdFkonJFyS08
    pURyt+RDGtT01mmSuasPH9yJsDWbxZLzlBS9AATUfpbV709w8u277sl8tgms49aKGVt9tySbb8Vt
    9Xktht9AJa5rYWnRc80H3SAV05EvmK7hpgdeHw1xIuX8TGXoVmNcmqlK/sXhcWXC+nmqZhtfl9jV
    Qkt27ZVG4uUZY7oeN3pjKSWXSJTS2VPuhAulVr2EUnacmny7klp2CSf05JBHaxWReNi7LJLAn+7A
    3qXcBUU+TyXXnw1XkY01u0/Iw23gQrv86dVdryCnq8WX5s4xl1NtWgNak97DeMUZ0Puwk7yqQFcv
    URfK/Si6bY0R3dgE31wEpFwsCUuXLoQdIR4Tj/G4zjfKMbo0uAoyxxoNcns/Y4Kv8Byp4KPZq4Ud
    k208+KySnw3mEXT21Hk1S6m1Jyf9uRLquqtptSj/AFRlp6s1XRbGFJanrz6FU+kr9DEWtUo1bglu
    lTDmlGqz+5hzTabXZqg4p1mn0oT+lJNvyZKWdTZl6U6y66FjJZyzeYyr01mXpRU6zG13ZhuuWRdi
    DWqV82FNbUmZymVK/MRaNz2p4Hij9WF3LhZ5kScugxFcsUsMzvhv3Ko5aa9HksordrHICbK9VBXB
    +Fr3piOHurNOSunHyJVTZ3ut9zcYxpYeemSeJLmlzSyRU3zxsNxFcZJ/TaJLTyXkbblGPNpqtqJr
    jp8ULvmZzdVilsnnzGn3RaWnoI6t000aqM06qhWS6lWS4e33RRmlyGPUWryW1dLAE5BPkKFZ/sAa
    JsViyBfkS8gmGUXUGyUOQFTSoNr1I6obAVPvLzsspqTtRSfXqZFii6tW+3lgjUSUKKNxhGcq1qP/
    AKmnwlbriRfen/Q5ZQYo6aX+uHuwZ+a/1AVFdLKRhxXS2a1PmLXPJKrOLWMFq9kaw/NC8Vgomnm2
    0W982h3xWwvuvMInMeqLS5URpbVXqQMX1K0ufsjLXsM9PcK14ehNNpq36ET6mray/YCfLpXlMtNZ
    V9RZG75XYG7X515UG1F3Fv8AYymrp4JeVzSJFactTv8AoLerbBLS873I3kI6Xe68sGHHOLTXMlsN
    3sqAYrLsUnsxS7Fqlvv3KCelVWXzEnhXY02rWA4U174JwZcla3NRed7L8tW1JOLCjGLd5LROI33M
    63vsbbjfn0wTS1bX9wM3fK0aVrZehNNKraroVSvLugNw4kobJPzRpyc5LXny5HOM6ezqsFjxOiSV
    cjO4uOjqMmtVruznJRdOlb5GFLNdBaeM+gzCtQaV16F57JsxSrAr/ssStYfJ+bHMnZvA2v2KLyyS
    v+iX7ltgTKWArKn1Lq6gSxjqR+wpV1A1WDLS9xaoX9wFk7luxQE/YZFV1HPcDJcooAlsLzDotLqg
    FkdE28hqTKKC+n3ARa/2hgu5KVvDZFMY2Qal0VPoRLnizWXgAk0s+4dJka7hpBFFdGiehehAp+pM
    Luw2/clZsqqmuYb8iUv9RVtdqiiW1eWS31NYayGkBMrdEoq37B3fRERLqWxcvshXXYtZ/uASGV7l
    pJ7r0LayksEVLrNGU7ZptEpWgLaS2avuNXhWFXNktbbi+qQK1c+tDU57JKiF1ZEEdZ2TZMrag2u2
    CWv7FFe+3pdjfFV/QB3fcCJZs1aXWtzDz5FphFw1V1fMUtqCw9i6u23cCYqqz9hbTFouPIKid8gn
    XMPpt3I76BFxWBdOjNO7b3N3yAb7Ef8AqHpkjYVQr9hQTrf3CJSspAFXYWxfVeobbwAu/Qu5CKuo
    FfoTyLvhkWAFEKzL3Ao5jkTYItAzqQKOlpvNhSh+i10bMgg05KsQS7kcmHT7kUQL9hsEigS3QX2G
    4xyAtoN7kBFXcjoBK8lFQslMte4Bk8rK2L6oBQd7INi8MDL+xUmMlT58wJdMdy2rJfUIXd2Ke4wL
    AWFnH2D6EAqRHH1Za6FCp/QqF0he3QC2qJbJaeBgA7I2aJjkA9QrTLjkQC7oW2Rqx5pAVcyWPIea
    QQvqW+hH7AKJ9WM3ZcUQBu+gD+w8ioLYNojIyDdksyVVsBbJkY3BQYDoXkgEwaSk9k3W9Ep90AsE
    AG6/wZpWa62SuYUpivYe5b6AQBJ6ew5AKtlVil3DYFw85I2icyNU6A1zTe5HkPeuuQ7AbC16jO/U
    gFvkHXoOorADPJepU3sTF/2LdbALfUrW9mWnYAofkM5rYjABbjAqneAhZUZbLYU57jsOYyA7C/UE
    SwELwEVpInMDWScypciUFVJhrO6ILCNacf0JWaJZchSsOtvuF0sfsADVbgXWMEsBu/3K9hjYm4DF
    BrAXexQRAVqyVjswJ7FyR9xQFsEcegSaWX9ygK6E26lAW98+ZdX+onn+4zLa2BcdGC6Z/okAHMcg
    CCcy/mYAVXux/cAgr5EAKC+pBbgAR7l/sAPwHyL18wAM9fM1yAAzz9QABeRQAgQAKstyLYAA9yLl
    5gFQ5s1zQBFYe5fyxAAgACNR39RLcAKj+pj8wBUXkRgAPy+pprxegBFZlyJ1AAP6S8gAJzL0ACHI
    LZgAZf10WOdwCjMm1KrKtgBofl9DK2YAHo4SX4aUqV6lnmdJZmm8t0AawZAAV//Z}
 
 ################################################################
 
 image create photo ::img::img -data $idata
 image create photo ::img::small -width $S(sz) -height $S(sz)
 set S(w) [image width ::img::img]
 set S(h) [image height ::img::img]
 DoDisplay
 return