On Tue, 2 Sep 2008 01:00:13 +0200 Carlo Wood <[EMAIL PROTECTED]> wrote: > I have a function that can draw to a cairo_t*. > I need to create a Gtk::IconSet. > > Gtk::IconSet wants me to pass a Glib::RefPtr<Gdk::Pixbuf> const&, > so ... I need to: > > - create a Gdk::Pixbuf object somehow > - get a related cairo_t* for it. > > I tried long and hard and spend several hours trying > to find examples or documentation about this, but > everything I tried core dumped (if it compiled at all). > > Can someone please tell me how to do this?
I have never gone that way round, but I think you should be able to have your destination surface for drawing as an image surface, created by cairo_image_surface_create() with the CAIRO_FORMAT_ARGB32 format (assuming it has an alpha channel, CAIRO_FORMAT_RGB24 if not), which will each have 4 bytes per pixel. After drawing, the data buffer obtainable with cairo_image_surface_get_data() will have raw pixel data in standard ARGB uncompressed format, with the alpha channel as the high byte and native endian. You should be able then to construct a Gdk::Pixbuf object from that with Gdk::Pixbuf::create_from_data(). Your rowstride will be 4 * pixel width (cairo image surface data is aligned in 32 bit units). However I believe Gdk::Pixbufs take their pixel data in RGBA format, with the alpha channel as the high byte, so you will need to do some byte reordering, but if so that will be trivial. Possibly this will be endian dependent - cairo surfaces are native endian. You had best suck that and see. I say I have never gone that way round because I have always used cairo image surfaces as pattern sources rather than surface destinations. Chris _______________________________________________ gtkmm-list mailing list gtkmm-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtkmm-list