I'd rather not mess with saving to a file at all.

In the abscense of a full working code snippet, here is an example that should show you the tricks needed, especially Image::Magick's BlobtoImage() and ImagetoBlob() methods. IM calls the scalar output of images blobs, and with base64encoding you can put them directly into Tk Photo objects, with no intermediate disk file. This example finds .jpgs in the current directory and resizes them upon a window resize, with an optional charcoal effect.

In your code, after the screenshot, load the binary screenshot $screen to a IM object with -data ( as you show) , work on it's effects, then redisplay it using a base64encoded ImagetoBlob(). Also notice the <visibility> binding, which you may or may not need.

UPDATE: see second response below, I don't believe IM can Read( -data), ie. a binary screenshot in a scalar. You need BlobtoImage, to load it.

#!/usr/bin/perl -w use strict; use Tk; use Tk::JPEG; use Image::Magick; use MIME::Base64; my $val = 0; my $im = Image::Magick->new; # a single object for thumbnails my $c; my $dir = "."; my @fl = <*.jpg>; print "@fl\n"; my $main = new MainWindow; $main->Label( -text => "Resize Window to see resizing and charcoal eff +efct", )->pack(); my $photo_obj = $main->Photo(-file => '' ); my $display = $main->Label(-width => 200, -height => 200, -image => $photo_obj, )->pack(-fill=>'both', -expand=>1); &loadpic( $fl[0] ); my $frame = $main->Frame()->pack(); my $nxt = $frame->Button(-text => "Next", -command => \&nextp)->pack(-side=>'left'); $frame->Button(-text => 'exit', -command => sub{destroy $main} )->pack(-side=> 'left'); $frame->Checkbutton( -onvalue => 1, -offvalue => 0, -text => 'Charcoal', -variable => \$val)->pack(-side=> 'left'); #$main->bind("<Visibility>", sub { $nxt->invoke }); $main->bind("<Visibility>", \&nextp); MainLoop; sub loadpic { my $filename = shift; $photo_obj->blank; #clear out old jpg my ($h,$w) = ($display->height, $display->width); # # how to scale the pic? # Create new size version $im->Read($filename); $im->Scale( geometry => $w.'x'.$h ); if($val){ $im->Charcoal('0x1') } #Tk needs base64 encoded image files my $data = encode_base64( $im->ImageToBlob() ); undef @$im; # blank $im object $photo_obj->put($data); $display->configure(-image => $photo_obj); } sub nextp { push (@fl,shift(@fl)); #circular list my $f = $fl[0]; loadpic("$dir/$f"); }

I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku ................... flash japh

In reply to Re: Perl::Tk blur screenshot of window and raise it by zentara
in thread Perl::Tk blur screenshot of window and raise it by pashanoid

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.