#!/usr/bin/perl -w # Strict use strict; use warnings; # Libraries use Tk; use Tk::Photo; use Tk::JPEG; use Tk::PNG; # Main program -- construct GUI my $mw = new MainWindow(); $mw->bind("" => sub { $mw->destroy() }); my $top = $mw->Frame()->pack(); # Use this section to create the image from a file (the "easy" way) # my $lab = image_from_file($top, "./smile.png"); # Use this section to create the image from data (the "tricky" way) my $data = image_data(); my $lab = image_from_data($top, $data); MainLoop; # Subroutines sub image_from_file { my ($widget, $fname) = @_; my $img = $mw->Photo(-file => $fname); # These two lines show what the data looks like: my $data = $img->data(-format => 'PNG'); print "The data for '$fname' is:\n$data\n"; my $label = $top->Label(-image => $img); $label->pack(); return $label; } sub image_from_data { my ($widget, $data) = @_; my $img = $mw->Photo(-data => $data); my $label = $top->Label(-image => $img); $label->pack(); return $label; } sub image_data { return " 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"; }