Re: How to render 8-bit raster graphics

Janet Mini wrote:
Hello all,

I'm new to gtkmm.
I have some 8-bit grayscale images that I want to display in a gtkmm application. I want to display them as a sequence of frames as an animation like a movie playback.
And I will also add some texts on top of the animation.

Does anybody have any good idea how to do it properly with performance (speed)?

Shall I use the gnome canvas widget?
I tested that I could use a look up table and duplicate my 8-bit data for each of the RGB channel and create a RGB pixbuf.

But is it possible that I use the grayscale visual and display just my 8-bit grayscale images on the canvas instead of using RGB?

Thank you in advance for any help and suggestion.


Gdk::Pixbuf will load data from most file formats for you, converting as it goes from whatever depth to its RGB[A] colorspace using optimized C and lookup tables and such (looks the same as XFree's code actually). I'd go with letting pixbufs do this work for you, rather than bothering with grayscale or 8-bit visuals (which aren't always available or are done in software by X anyway).

It's then easy to render your pixbufs to say a Gtk::DrawingArea (a canvas for just one image at a time is overkill), with da.get_window()->draw_pixbuf(da.get_style()->get_bg_gc(0), pixbufs[i], ...)

Rendering into pixbuf isn't the API's strong suit though, maybe just draw your pixbuf to the window first, then e.g. a Pango::Layout separately after that for the text, with da.get_window()->draw_layout(...).

Draw each frame of the animation from a Glib::signal_timeout() callback (don't worry about handling drawingarea exposes, double buffering will take care of it), and there you are.

Michael J M Thomson

main(){int/* gcc m.c -o matrix */i=0,j,s[40]={0,},l[40];for(;;){s[i]||(l[i]=s[i

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]