Hi again,

I have a program that needs to draw circles and other elements on a gdk.Pixbuf image.

The current code works well but when creating a Cairo-surface from pixbuf, the gtk.gdk.Pixbuf.get_pixels_array() function reports that it's deprecated and should be avoided.

pix_data = pixbuf.get_pixels_array()
surface = cairo.ImageSurface.create_for_data(pix_data, cairo.FORMAT_RGB24, pixbuf.get_width(), pixbuf.get_height(), pixbuf.get_rowstride())
The message says:
"""draw-test.py:29: DeprecationWarning: PyArray_FromDimsAndDataAndDescr: use PyArray_NewFromDescr.
pix_data = pixbuf.get_pixels_array()"""

Ref: http://www.pygtk.org/docs/pygtk/class-gdkpixbuf.html#method-gdkpixbuf--get-pixels-array

Here is my test code.
http://www.futuredesktop.com/tmp/draw-test.py
-----

The c version of Cairo and PyCairo behave differently.
In c code, to get create the Cairo surface, I have to use gdk_pixbuf_get_pixels(), not the get_pixels_array() function.

   gint pixbuf_width = gdk_pixbuf_get_width(pixbuf);
   gint pixbuf_height = gdk_pixbuf_get_height(pixbuf);

cairo_surface_t *surface = cairo_image_surface_create_for_data(gdk_pixbuf_get_pixels(pixbuf),
                                         CAIRO_FORMAT_RGB24,
                                         pixbuf_width,
                                         pixbuf_height,
                                         gdk_pixbuf_get_rowstride(pixbuf));

Unfortunately PyCairo's
surface = cairo.ImageSurface.create_for_data(...) expects an array type, not a string type. AFAIK, strings are not arrays in Python.

http://www.pygtk.org/docs/pygtk/class-gdkpixbuf.html#method-gdkpixbuf--get-pixels
returns a string type
------

Questions:
1) What is the best way to draw onto gdk.Pixbuf? (most likely using Cairo, other means also welcomed)

2) If the gtk.gdk.Pixbuf.get_pixels_array() or its internals are deprecated, then what will replace it?

Greetings
 Osmo (Moma) Antero
 Grønland, Oslo

_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to