Re: Draw in a GdkPixbuf



Thank you James,
I found what I wanted in one of the links: http://live.gnome.org/GtkCairoIntegration

I had previously seen this page, but didn't see a small code snippet in python that does what I want. I've translated it in C, and it work now: I can convert a pixbuf to something where I can draw in with cairo.

For the curious ones, here's a simple example on how to do that.

Thanks again,
--
Luis

#include <glib.h>
#include <cairo.h>
#include <gdk-pixbuf/gdk-pixbuf.h>

int main (void)
{
        GdkPixbuf *pixbuf;
        gint width, height;
        cairo_format_t format;
        cairo_surface_t *surface;
        cairo_t *cr;

        g_type_init ();

        pixbuf = gdk_pixbuf_new_from_file ("test.png", NULL);
        g_assert (pixbuf != NULL);
        
format = (gdk_pixbuf_get_has_alpha (pixbuf)) ? CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24;
        width = gdk_pixbuf_get_width (pixbuf);
        height = gdk_pixbuf_get_height (pixbuf);

        surface = cairo_image_surface_create (format, width, height);
        g_assert (surface != NULL);
        cr = cairo_create (surface);

        /* Draw the pixbuf */
        gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
        cairo_paint (cr);

        /* Draw a red rectangle */
        cairo_set_source_rgb (cr, 1, 0, 0);
        cairo_rectangle (cr, width * .25, height * .25, width *.5, height *.5);
        cairo_fill (cr);

        /* Save to a PNG file */
        cairo_surface_write_to_png (surface, "output.png");

        cairo_surface_destroy (surface);
        cairo_destroy (cr);

        return 0;
}


James Scott Jr a écrit :
Ok,

http://cairographics.org/examples/
http://live.gnome.org/GtkCairoIntegration

These links have some examples of using everything from a raw image to a
pdf as the backend in cairo from the command line -- without the use of
gtk.

Hope this fits your need better than my last response.

James,


On Thu, 2008-05-29 at 03:18 +0200, Luis Menina wrote:
Hi list!

I'm trying to find a way to draw in a GdkPixbuf (for example draw a rectangle on the pixbuf) and save the result to a file afterwards.

I found in devhelp the gdk_draw_* functions, but to use them I need a GdkPixmap. gdk_pixmap_new requires a GdkDrawable. The problem is that I'm developping a command line application, so I don't use GTK, only glib, gdk, and gdk-pixbuf. Even creating the GdkPixmap with a NULL GdkDrawable, I can't workaround the problem, because the documentation of gdk_draw_pixbuf tells me that "All windows have a colormap, however, pixmaps only have colormap by default if they were created with a non-NULL window argument. Otherwise a colormap must be set on them with gdk_drawable_set_colormap()". Trying to get a colormap requires other stuff, which requires other stuff, and so on...

As this seems to be quite old-fashioned way of doing things, I tried to see if cairo could do the trick. But it seems there's no way to draw to a GdkPixbuf with cairo (I'm unfamiliar with cairo).

So, does anyone have an hint on how to draw and save an image from a GdkPixbuf, with gdk or cairo ?

Thanks for you help,

Luis
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list





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