[Cairo] PNG backend for cairo?

Abraham Egnor aegnor at antioch-college.edu
Fri Nov 14 13:28:30 PST 2003

I'd prefer that it be in its own library, less because of dependencies
than because it keeps the interface clean.  I suspect that confusion is a
non-issue; potential cairo users will be smart enough to read
documentation, I'm pretty sure.  Keeping backends that don't require
internal functionality in separate libraries also scales much better.


Carl Worth <cworth at east.isi.edu> writes:
>As most of you know, I rarely use cairo for more than trivially simple
>demonstrations. But, since I'm getting pretty good at those, I'm
>tempted to make them even more trivial.
>In order to do so, I'm tempted to add a PNG backend to cairo. (I
>actually think this would be helpful beyond the case of trivial demos,
>but I can't prove that since I almost never write those kinds of
>The problem with adding a PNG backend is that it would introduce a new
>dependency, (on libpng), and of course I'd like to minimize
>One option is to introduce a new helper library libcairo-png or some
>such with its own <cairo-png.h>. This is possible since the PNG
>backend only requires functionality already in the public API. This is
>in contrast to the X/Render backend or a potential PDF backend, which
>require internal functionality.
>But I don't like the notion of confusing the user with respect to
>which backends are builtin and which are available only in helper
>So, I'm back to wanting to shove the PNG backend directly into
>cairo. While some might see the libpng dependency as gratuitous, some
>might already find the X library dependencies equally (or more)
>gratuitous. So maybe all we need is the ability to optionally disable
>backends at compile time?
>Any thoughts to help me out?
>PS. Here's a fairly minimal, but complete example possible with the
>proposed PNG backend. The differences compared to what's possible
>today is that there's no need to allocate an image buffer, worry about
>stride, or write code to convert the image and write it out as a PNG.
>#include <cairo.h>
>int main (void)
>    cairo_t *cr;
>    cr = cairo_create ();
>    cairo_set_target_png (cr, "demo.png", CAIRO_FORMAT_ARGB32, 100, 100);
>    cairo_move_to (cr, 10., 10.);
>    cairo_line_to (cr, 90., 90.);
>    cairo_set_rgb_color (cr, 0., 0., 1.);
>    cairo_fill (cr);
>    cairo_destroy (cr);
>    return 0;
>cairo mailing list
>cairo at cairographics.org

More information about the cairo mailing list