Linux Cairo, webcam displaying images

G’day
Can anyone please advise me on how to constantly display the output from
a webcam using Ruby & Cairo?
I can operate the webcam, write images to disk etc and I can display a
Gdk::Pixbuf okay. It’s just the updating of an image on the screen that
I’m missing.

The data returned from V4l is a ruby ‘string’ but how do I display it?
At first I thought to display a blank Gdk::Pixbuf of correct size
(640x480) and constantly modify it’s buffer but I think this might not
be possible from within Ruby???

====
From the Ruby-Gnome2 site it says:
Gdk::Pixbuf.new(colorspace, has_alpha, bits_per_sample, width, height)
Creates a new Gdk::Pixbuf and allocates a buffer for it. The buffer
has an optimal rowstride. Note that the buffer is not cleared; you will
have to fill it completely yourself. Raises an…

note “you will have to fill it completely yourself” how is this achieved
in Ruby?

Any help would be most welcome.

Cheers, Mike

Hi,

In [email protected]
“Linux Cairo, webcam displaying images” on Sat, 11 Nov 2006 09:00:08
+0900,
Mike D. [email protected] wrote:

Can anyone please advise me on how to constantly display the output from
a webcam using Ruby & Cairo?

Data from webcam (String) → Gdk::Pixbuf →
Cairo::ImageSurface.new(data, format, width, height, stride) →
Cairo::Context.new(Cairo::XXXSurface.new) →
context.set_source(image_surface) → context.paint

The data returned from V4l is a ruby ‘string’ but how do I display it?
At first I thought to display a blank Gdk::Pixbuf of correct size
(640x480) and constantly modify it’s buffer but I think this might not
be possible from within Ruby???

Use Gdk::Pixbuf.new(data, colorspace, has_alpha, bit_per_sample,
width, height, rowstride):

Creates a new Gdk::Pixbuf out of in-memory image
data. Currently only RGB images with 8 bits per sample
are supported. Raises an Gdk::PixbufError if there was
not enough memory.

* data: Image data in 8-bit/sample packed format(String).
* colorspace: Color space(GdkColorspace) for image data.
* has_alpha: true if the data has an opacity channel or false.
* bits_per_sample: Number of bits per color sample.
* width: Width of image in pixels.
* height: Height of image in pixels.
* rowstride: Distance in bytes between row starts.
* Returns: A newly-created Gdk::Pixbuf.

Thanks,

Hi,

In [email protected]
“Re: Linux Cairo, webcam displaying images” on Sat, 11 Nov 2006
12:58:41 +0900,
Kouhei S. [email protected] wrote:

Can anyone please advise me on how to constantly display the output from
a webcam using Ruby & Cairo?

Data from webcam (String) → Gdk::Pixbuf →
Cairo::ImageSurface.new(data, format, width, height, stride) →
Cairo::Context.new(Cairo::XXXSurface.new) →
context.set_source(image_surface) → context.paint

I mistook. Gdk::Pixbuf isn’t needed.

Data from webcam (String) →
Cairo::ImageSurface.new(data, format, width, height, stride) →
Cairo::Context.new(Cairo::XXXSurface.new) →
context.set_source(image_surface) → context.paint

Thanks,

Hi,

In [email protected]
“Re: Linux Cairo, webcam displaying images” on Sat, 11 Nov 2006
15:20:04 +0900,
Mike D. [email protected] wrote:

Just a couple of questions to clarify things if you wouldn’t mind.

Cairo::ImageSurface.new(data, format, width, height, stride) →

is ‘data’ a Ruby string returned from the V4l?

Yes, it’s a String. But I don’t know V4l’s data format. So,
I can’t promise you that you can use V4l’s data directory.

what is ‘format’?

One of the cairo_format_t:
http://www.cairographics.org/manual/cairo-Image-Surfaces.html#id2598794

In rcairo, those formats are mapped to Cairo::FORMAT_XXX.

Thanks,

Kouhei S. wrote:

Cairo::Context.new(Cairo::XXXSurface.new) ->

kou

Thanks for the info kou,
Just a couple of questions to clarify things if you wouldn’t mind.

Cairo::ImageSurface.new(data, format, width, height, stride) ->

is ‘data’ a Ruby string returned from the V4l?

what is ‘format’?

Thanks for your help kou
Mike

Kouhei S. wrote:

is ‘data’ a Ruby string returned from the V4l?

Thanks,

kou

Thanks a lot kou, you’re a star.
Cheers, Mike