【发布时间】:2020-05-23 19:34:36
【问题描述】:
对于上下文,我正在尝试gtk custom drawing example。我想将Surface(在我的情况下为 xlib 表面)转储到 SVG 文件中,并获取实际的矢量图像,而不是嵌入的 PNG。
例如:
cairo_surface_t *svg_surface;
svg_surface = cairo_svg_surface_create("/path/myfile.svg", 200, 200);
cairo_t *cr;
cr = cairo_create(svg_surface);
cairo_set_source_surface(cr, surface, 0, 0);
cairo_paint(cr);
cairo_surface_flush(svg_surface);
cairo_surface_finish(svg_surface);
生成一个包含如下内容的 SVG:
<svg ...>
<image ... xlink:href="data:image/png;base64,iVBORw0K...>
</svg>
绘制成SVG,例如:
cairo_move_to(svg_surface, 0, 0)
cairo_line_to(svg_surface, 100, 100)
cairo_stroke(svg_surface)
生产:
<svg ...>
<path style="fill:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke:rgb(0%,0%,0%);stroke-opacity:1;stroke-miterlimit:10;" d="M 10 10 L 100 100 "/>
</svg>
有没有办法将原始表面绘制成 SVG,并获得这样的输出,而不是嵌入的 PNG?
我知道我可以记录在原始表面中完成的所有绘图操作,然后将它们重播到 SVG 中,但我希望有更好的方法来做到这一点。如果不是,根本原因是什么?
【问题讨论】: