http://qs321.pair.com?node_id=954150

ashokpj has asked for the wisdom of the Perl Monks concerning the following question:

Hi All,

I am trying to take printscreen and save it is as an image file. However i get image file in bmp format using Win32::Clipboard module.

Is it possible to save image in TIFF format?.

Thanks in advance

#!/usr/bin/perl -w use strict; use Win32::Clipboard; use Win32::GuiTest qw(FindWindowLike SetForegroundWindow SendKeys); # Find a specific Window my @windows = FindWindowLike(0, qr/^Microsoft Excel/, qr/^XLMAIN$/); for (@windows) { SetForegroundWindow($_); SendKeys('{PRTSCR}'); # Alt Print Screen sleep 2; } # Get the image from the clipboard. my $screen = Win32::Clipboard::GetBitmap() or die "No image captured: +$!\n"; # Print the image to a file. open BITMAP, "> pscreen.bmp" or die "Couldn't open bitmap file: $!\ +n+"; binmode BITMAP; print BITMAP $screen; close BITMAP; __END__

Replies are listed 'Best First'.
Re: How to save the image in TIFF format by using Win32::Clipboard
by quester (Vicar) on Feb 16, 2012 at 07:39 UTC
Re: How to save the image in TIFF format by using Win32::Clipboard
by fisher (Priest) on Feb 16, 2012 at 07:44 UTC
    Internal representation for images in windows is bitmap format. You have to convert it.
Re: How to save the image in TIFF format by using Win32::Clipboard
by chrestomanci (Priest) on Feb 16, 2012 at 09:04 UTC

    The windows clipboard works by the sending app offering the data in a number of different formats, and the receiving app the chooses which format it wants to take.

    For example, if you are editing a document in MS Word, and you copy some text onto the clipboard, Word will create an offer for Word format, plain text and a number of intermediate formats with varying levels of mark-up support. If you paste the text into another word doc, then Word will accept the text in native format, but if you paste into a simple text editor like vim, then it will take the plain text version.

    The point is, that you can't have an image in TIFF format, unless the sending application is offering an image in that format. You might want to experiment with an application that uses TIFF as it's native internal format, and then call EnumFormats() (From Win32::Clipboard) to see if TIFF is offered.

    In the general case, you probably won't be offered a TIFF image file by most applications, so if you want to save in that format, you need a conversion libary. fisher suggested Image::Magick which I also think is a good choice.

Re: How to save the image in TIFF format by using Win32::Clipboard
by lutok (Scribe) on Feb 16, 2012 at 11:35 UTC

    Yes, you want to use ImageMagick http://www.imagemagick.org/script/perl-magick.php
    You can use it stand alone with its convert function as in:

    convert mylogo.bmp mylogo.jpg
    or in a script along the lines of:
    #!/usr/local/bin/perl use Image::Magick; my($image, $x); $image = Image::Magick->new; $x = $image->Read('girl.png', 'logo.png', 'rose.png'); warn "$x" if "$x"; $x = $image->Crop(geometry=>'100x100+100+100'); warn "$x" if "$x"; $x = $image->Write('x.png'); warn "$x" if "$x";

    Just save it in whatever format you want.