Well here is another little function, that is similar to Tk's WinPhoto. It will take a jpg or png screenshot. It's faster than
Tk::WinPhoto too.
#!/usr/bin/perl
use warnings;
use strict;
use Glib qw/TRUE FALSE/;
use Gtk2 '-init';
my $window = Gtk2::Window->new('toplevel');
$window->set_title('Screenshot');
$window ->signal_connect( 'destroy' => \&delete_event );
$window->set_border_width(10);
#->set_size_request(300,200);
$window->set_default_size(300,200);
my $vbox = Gtk2::VBox->new( FALSE, 6 );
$vbox->set_size_request(0,0);
$window->add($vbox);
$vbox->set_border_width(2);
my $hbox= Gtk2::HBox->new( FALSE, 6 );
$vbox->pack_end($hbox,FALSE,FALSE,0);
$hbox->set_border_width(2);
$vbox->pack_end (Gtk2::HSeparator->new, FALSE, FALSE, 0);
my $button = Gtk2::Button->new_from_stock('gtk-quit');
$hbox->pack_end( $button, FALSE, FALSE, 0 );
$button->signal_connect( clicked => \&delete_event );
my $button1 = Gtk2::Button->new_from_stock('Screenshot');
$vbox->pack_start( $button1, FALSE, FALSE, 0 );
$button->signal_connect( clicked => \&screenshot );
$window->show_all();
Gtk2->main;
#####################################
sub delete_event {
Gtk2->main_quit;
return FALSE;
}
#####################################
sub screenshot{
#we are going to save the entire mainwindow
my ($width, $height) = $window->window->get_size;
# create blank pixbuf to hold the image
my $gdkpixbuf = Gtk2::Gdk::Pixbuf->new ('rgb',
0,
8,
$width,
$height);
$gdkpixbuf->get_from_drawable ($window->window,
undef, 0, 0, 0, 0, $width, $height);
#only jpeg and png is supported !!!! it's 'jpeg', not 'jpg'
$gdkpixbuf->save ("$0.jpg", 'jpeg', quality => 100);
return FALSE;
}
# from "perldoc Gtk2::Gdk::Pixbuf"
# $pixbuf->save ($filename, 'jpeg', quality => '100');
# Currently only a few parameters exist. JPEG images can be saved
# with a "quality" parameter; its value should be in the range
# [0,100]. Text chunks can be attached to PNG images by specifying
# parameters of the form "tEXt::key", where key is an ASCII string of
# length 1-79. The values are UTF-8 encoded strings.