我有一个基于C++的简单libCairo程序,用于绘制一些图像(例如,将一个图像放到另一个图像上,编写一些文本,等等)。我需要加载一些SVG文件(以避免缩放工件),然后将它们绘制到从PNG加载的表面上。
我有一个包装类,它包含一个cairo_t
上下文,并允许从该上下文获取一个表面:
cairo_surface_t *CairoImage::getSurface() {
return cairo_get_target(context);
}
我现在像这样加载SVG文件:
CairoImage::CairoImage(const char *path, double width, double height) {
auto surface = cairo_svg_surface_create(path, width, height);
context = cairo_create(surface);
}
我就是这样把一幅画画到另一幅上的:
cairo_set_source_surface(context, image.getSurface(), 0, 0);
cairo_rectangle(context, x, y, image.getWidth(), image.getHeight());
cairo_clip(context);
cairo_paint(context);
cairo_reset_clip(context);
但它不起作用(它只是没有画任何东西)。如何解决这一问题?
发布于 2021-03-03 16:13:59
Cairo可以编写SVG文件,但不能读取它们。
要加载SVG文件,需要一些类似的东西,比如librsvg。我只是想让Google给我一个简短的图书例子,但没有找到。
https://stackoverflow.com/questions/66445019
复制相似问题