【发布时间】:2011-09-23 10:10:38
【问题描述】:
我有一些看起来像这样的代码:
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 的帮助将不胜感激。
编辑:忘记提供版本信息。 cairo_version_string() 给出的 Cairo 1.10.2。 g++ 4.52 在 Ubuntu 11.04 上运行
EDIT(2):好的,我已将其追溯到 cairo 的 PNG 问题,并发现 cairo_surface_write_to_png 的行为也不如预期。此功能和尝试在 SVG 中嵌入图像都会导致“内存不足错误”,我仍然不知道 为什么。
【问题讨论】: