Making screenshots with Ruby

Hello,

Can anyone help me with this one? Been looking for information about it,
but couldn’t find any…

I want my program to make a screenshot of the screen (or better: a
specific window), and it should be able to get some data from the
screenshot (compare parts to other images)

Does anyone know how to tackle this problem?

Thanks,

Thomas

Thomas wrote:

Hello,

Can anyone help me with this one? Been looking for information about it,
but couldn’t find any…

I want my program to make a screenshot of the screen (or better: a
specific window), and it should be able to get some data from the
screenshot (compare parts to other images)

Does anyone know how to tackle this problem?

Using the excellent RMagick:
http://redux.imagemagick.org/RMagick/doc/image1.html#capture

Cheers,

I want my program to make a screenshot of the screen

I think the rubycocoa example simpleapp does that, you could look at
how they do it.

Unfortunately cacao is for mac, and the RMagick function is for x
(linux), while I need Windows… Any tips? Maybe there’s a way using the
Win32 API?

I don’t know how to create a “DestDC” for the bitblt function
(Technical documentation | Microsoft Learn),
so I have no idea what to do… Currently I’m using a Visual Basic
program which takes a screenshot (using the clipboard, automatically
pressing the printscreen button) but ofcourse that’s not a good
solution, and it needs harddrive access…

Thanks.

Oh and forgot to add - I’m using them later with RMagick, so I’d want
them loaded in memory in a way that RMagick can understand them, but if
it has to it can be saved to file too :slight_smile:

I would be interestde in how you solved this

Regards,
Bryan Webb

[email protected] wrote:

Oh and forgot to add - I’m using them later with RMagick, so I’d want
them loaded in memory in a way that RMagick can understand them, but if
it has to it can be saved to file too :slight_smile:

There are a couple of ways to construct an RMagick image without reading
an image file. If the screenshot data is in a Ruby string in one of the
formats that ImageMagick/GraphicsMagick understands (JPEG, GIF, BMP, or
one of the 80+ others) then you can use Image.from_blob[1].

If the screenshot data is in a Ruby string (or an instance of any class
with a to_str method, such as NArray) and is simply “raw” pixel data in
scanline order (left-to-right, top-to-bottom) you use the
Image.import_pixels method. It’s blindingly fast. (I’d give you a URL to
the doc, but the online doc is sufficiently out-of-date that it doesn’t
describe how import_pixels exploits to_str. You can get the details from
your local copy of the RMagick doc.)

[1] RMagick 1.15.0: class Image (class and instance methods, part 1)