O'Reilly logo

Mastering Perl/Tk by Nancy Walsh, Stephen Lidie

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Simple Photo Rotations

Using standard Photo methods, it’s possible to rotate an image 90 degrees clockwise, 90 degrees counter-clockwise, or flip it 180 degrees.[6]

Once encapsulated in a module—call it Tk::PhotoRotateSimple—we can showcase its capabilities with this code, the result of which is shown in Figure 17-22.

use Tk;
use Tk::PhotoRotateSimple;
use subs qw/rotate/;
use strict;

my $mw = MainWindow->new;
my $p = $mw->Photo(-file => Tk->findINC('Xcamel.gif'));

rotate 'Original';
rotate 'flip';
rotate 'l90';
rotate 'r90';

MainLoop;

sub rotate {

    my $direction = shift;

    my $f = $mw->Frame(qw/-width 100 -height 100/)->pack(qw/-side left/);
    $f->packPropagate(0);
    $f->Label(-text => $direction)->pack;
    my $i = $f->Label(-image => $p)->pack(qw/-expand 1 -fill both -anchor c/);

    return if $direction eq 'Original';

    my $tmp = $mw->Photo;
    $tmp->copy($p);
    $tmp->rotate_simple($direction);
    $i->configure(-image => $tmp);
    
}

$p is our friendly camel Photo object. Using it as the original, we call rotate to rotate the image three times: 180 degrees, left 90 degrees, and right 90 degrees. The first call to rotate does no rotation, it just displays the original Photo and returns. The rotate_simple method rotates the actual Photo, so we make a temporary copy in order to preserve the original. Then call rotate_simple with flip, l90, or r90.

So much for the user’s point of view; let’s see the actual module.

Figure 17-22. Rotate window

The first thing to note is that we are extending the class Tk::Photo ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required