Try creating a new (empty) image of the required size and then use cairo to
fill it with the desired contents. The following link may help you (though
it is in C and not perl, but the API is the same):

https://gist.github.com/bert/985903

Regards,
Dov


On Thu, Oct 26, 2017 at 11:18 AM, Les Trol <lestrol...@gmx.com> wrote:

> I'm implementing a spec in which an image is displayed in a
> Gtk2::Textview. Simple enough to do, but the spec requires optional extras,
> such as displaying padding around the image and detecting clicks on it.
>
> Taking one problem at a time:
>
> 1. Sometimes the image must be displayed its original size. Sometimes it
> must be its original size, but surrounded by some empty 'padding'.
>
> The script below is the closest I've been able to get so far. It uses
> Gtk2::Gdk::Pixbuf->scale to create the 'padding'.
>
> However, the 'padding' is not empty space, as I'd hoped, but a blur of
> pixels from the edges of the original image. I see the same effect for many
> different images in different sizes (such as this cat image:
> https://i.imgur.com/unoDgq7.png - I see https://imgur.com/a/iqe2t )
>
> Is there a simple way to remove the blur, or does this call for a
> different approach entirely?
>
> #!/usr/bin/perl
> package scaleme;
>
> use strict;
> use diagnostics;
> use warnings;
>
> use Gtk2 '-init';
> use Glib qw(TRUE FALSE);
>
> # Display this image
> my $path = 'change_this_directory/cat.bmp';
>
> # Open a Gtk2 window with a Gtk2::TextView
> my $window = Gtk2::Window->new('toplevel');
> $window->set_title('scaleme');
> $window->set_position('center');
> $window->set_default_size(800, 600);
> $window->signal_connect('delete-event' => sub {
>     Gtk2->main_quit();
>     exit;
> });
>
> my $frame = Gtk2::Frame->new();
> $window->add($frame);
>
> my $scrollWin = Gtk2::ScrolledWindow->new(undef, undef);
> $frame->add($scrollWin);
> $scrollWin->set_policy('automatic', 'automatic');
> $scrollWin->set_border_width(0);
>
> my $textView = Gtk2::TextView->new;
> $scrollWin->add_with_viewport($textView);
>
> if (-e $path) {
>
>     # Display a photo of a cat face
>     my $pixbuf = Gtk2::Gdk::Pixbuf->new_from_file($path);
>
>     my $buffer = $textView->get_buffer();
>     $buffer->insert_pixbuf(
>         $buffer->get_end_iter(),
>         $pixbuf,
>     );
>
>     # Make the overall image 20% bigger, but the cat's face is its
>     #   original size (and centred in the middle)
>     my $factor = 0.2;
>     my $w = $pixbuf->get_width();
>     my $h = $pixbuf->get_height();
>
>     my $pixbuf2 = Gtk2::Gdk::Pixbuf->new(
>         'GDK_COLORSPACE_RGB',
>         FALSE,
>         $pixbuf->get_bits_per_sample(),
>         ($w * (1 + $factor)),
>         ($h * (1 + $factor)),
>     );
>
>     $pixbuf->scale(
>         # $dest
>         $pixbuf2,
>         # $destx, $desty
>         0,
>         0,
>         # $dest_width, $dest_height
>         ($w * (1 + $factor)),
>         ($h * (1 + $factor)),
>         # $offset_x, $offset_y
>         ($w * ($factor / 2)),
>         ($h * ($factor / 2)),
>         # $scale_x, $scale_y
>         1,
>         1,
>         # $interp_type
>         'GDK_INTERP_NEAREST',
>      );
>
>     $buffer->insert_pixbuf(
>         $buffer->get_end_iter(),
>         $pixbuf2,
>     );
> }
>
> $window->show_all();
> Gtk2->main();
>
>
>
> _______________________________________________
> gtk-perl-list mailing list
> gtk-perl-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/gtk-perl-list
>
>
_______________________________________________
gtk-perl-list mailing list
gtk-perl-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-perl-list

Reply via email to