У меня есть код, который выглядит следующим образом:
cairo_surface_t * surface = cairo_svg_surface_create("0.svg", 512, 512);
cairo_t * context = cairo_create(surface);
int * data = new int[512*512];
// fill the data...
cairo_surface_t * image_surface =
cairo_image_surface_for_data(data, 512, 512, 512*4);
cairo_set_source_surface(context, image_surface, 0, 0);
cairo_paint(context);
// do some other drawing ...
cairo_surface_flush(surface);
cairo_surface_finish(surface);
cairo_surface_destroy(surface);
cairo_destroy(context);
Однако SVG всегда выглядит поврежденным. Изображение написано неправильно, и все следующие команды рисования не работают. Изменение типа поверхности на PS, то есть:
cairo_surface_t * surface = cairo_ps_surface_create("0.ps", 512, 512);
создает совершенно правильный документ PS.
Буду признателен за любую помощь в исправлении SVG.
РЕДАКТИРОВАТЬ: Забыли предоставить информацию о версии.
Каир 1.10.2, как указано в cairo_version_string ().
g ++ 4.52
Работает на Ubuntu 11.04
РЕДАКТИРОВАТЬ (2): Хорошо, я проследил это до проблем с PNG cairo и обнаружил, что cairo_surface_write_to_png не ведет себя так, как ожидалось. И эта функция, и попытка встроить изображение в SVG вызывают «ошибки нехватки памяти», а я до сих пор не знаю,
почему.