#define _GNU_SOURCE #include #include #include #include int A[] = { // 73, 66, // 58, 57, // 36, 44, 18, 32, 16, 30, 14, 29, 12, 27, }; int nA = sizeof(A)/sizeof(int); double Z = 1.1; static cairo_status_t writer (void *closure, const unsigned char *data, unsigned int length) { if (length == fwrite(data, 1, length, (FILE *)closure)) return CAIRO_STATUS_SUCCESS; return CAIRO_STATUS_WRITE_ERROR; } int main(int argc, char *argv[]) { int i; cairo_t *cr; cairo_surface_t *surface; feenableexcept(FE_INVALID); surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 100, 100); cr = cairo_create(surface); cairo_surface_destroy (surface); cairo_move_to(cr, A[0] * Z, A[1] * Z); for (i = 2; i < nA; i += 6) cairo_curve_to(cr, A[i] * Z, A[i+1] * Z, A[i+2] * Z, A[i+3] * Z, A[i+4] * Z, A[i+5] * Z); cairo_stroke(cr); cairo_surface_write_to_png_stream(surface, writer, stdout); cairo_destroy(cr); return 0; }