usar para insertar imagen exportar examples con color cambiar agregar c++ c svg cairo

c++ - para - ¿Cómo escribo una imagen en un archivo SVG usando cairo?



svg image html5 (3)

Tengo un código que se ve así:

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);

Sin embargo, el svg siempre aparece dañado. La imagen no está escrita correctamente, y todos los comandos de dibujo siguientes no funcionan. Cambiar el tipo de superficie a PS, es decir:

cairo_surface_t * surface = cairo_ps_surface_create("0.ps", 512, 512);

produce un documento PS perfectamente correcto. Cualquier ayuda para arreglar el SVG sería apreciada.

EDITAR: Olvidé proporcionar información sobre la versión. Cairo 1.10.2 dado por cairo_version_string (). g ++ 4.52 ejecutándose en Ubuntu 11.04

EDITAR (2): Ok, he rastreado esto hasta los problemas de PNG con cairo y descubrí que cairo_surface_write_to_png tampoco se comporta como se esperaba. Tanto esta función como el intento de incrustar una imagen en un SVG provocan "errores de falta de memoria", y todavía no sé por qué.


No puedo encontrar cairo_image_surface_for_data en la documentación de Cairo. ¿ Quisiste decir cairo_image_surface_create_for_data ? Si es así, debe usar cairo_format_stride_for_width para calcular el tamaño de la matriz, y los datos de mapas de bits deben estar en el formato que Cairo espera. Dado que ambas salidas están dañadas, esto sugiere fuertemente que el problema está con la entrada .


Parece que se olvidó de especificar la versión de SVG como:

cairo_svg_surface_restrict_to_version (surface, CAIRO_SVG_VERSION_1_2);

Puedes hacer esto inmediatamente después de crear la superficie.


Quizás publicar el SVG simple resultante puede ayudar.