#!/usr/bin/perl use strict; use warnings; use Gtk2 '-init'; # a list to get most of the standard graphic formats into a glob my @exts = qw(wbmp wmf jpeg jpg bmp gif pcx png pnm pbm pgm ppm tga targa xbm tiff tif xpm ); @exts = map { $_ = "*.$_" } @exts; #map to setup the glob below my @files = <@exts>; #non recursive if(scalar @files == 0){ die "No photo files found\n" } print "@files\n"; my $mw = Gtk2::Window->new; $mw->signal_connect('destroy', sub { Gtk2->main_quit }); my $vp = Gtk2::Viewport->new(undef, undef); $mw->add($vp); # start with base image my $alpha = 0; my $next = 0; my $pb_base = Gtk2::Gdk::Pixbuf->new_from_file_at_scale ($files[0], 600,600,0); my $pb_base_orig = $pb_base->copy(); #get next pixbuf push (@files,shift(@files)); my $pb_next = Gtk2::Gdk::Pixbuf->new_from_file_at_scale ($files[0], 600,600,0); my $image = Gtk2::Image->new_from_pixbuf ($pb_base); $vp->add($image); $mw->set_title("fade demo"); $mw->show_all(); my $id = Glib::Timeout->add (100, \&sequence); Gtk2->main; sub sequence{ if( $next ){ # set base to be the previous next $pb_base = $pb_next; $pb_base_orig = $pb_base->copy(); $image->set_from_pixbuf ($pb_base); Gtk2->main_iteration while Gtk2->events_pending; #get next pixbuf push (@files,shift(@files)); $pb_next = Gtk2::Gdk::Pixbuf->new_from_file_at_scale ($files[0], 600,600,0); $next = 0; $alpha = 0; }else{ $alpha += 5; print "$alpha\n"; if ($alpha == 255){ $next = 1; } #$pixbuf1->composite ($pixbuf, $dest_x, $dest_y, $dest_width, $dest_height, # $offset_x, $offset_y, $scale_x, $scale_y, $interp_type, $overall_alpha) $pb_next->composite ($pb_base, 0, 0, 600, 600, 0, 0, 1, 1, 'nearest', $alpha); # 0 <= alpha <= 255 $image->set_from_pixbuf ($pb_base); } Gtk2->main_iteration while Gtk2->events_pending; # prevents accumulation of pixbuf changes $pb_base = $pb_base_orig->copy(); return 1; }