将 SVG 作为开罗图像表面加载的最佳方法是啥?

Posted

技术标签:

【中文标题】将 SVG 作为开罗图像表面加载的最佳方法是啥?【英文标题】:What is the best way to load SVG as Cairo image surface?将 SVG 作为开罗图像表面加载的最佳方法是什么? 【发布时间】:2021-06-01 07:53:25 【问题描述】:

我有一个基于 libCairo 的简单 C++ 程序,旨在绘制一些图像(例如,将一个图像放在另一个图像上,写一些文本,等等)。我需要加载一些 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);

但它不起作用(它只是不画任何东西)。怎么解决?

【问题讨论】:

【参考方案1】:

Cairo 可以写入 SVG 文件,但不能读取它们。

您需要类似 librsvg 的东西来加载 SVG 文件。我只是想让 Google 给我一个简短的 librsvg 示例,但没有找到。

【讨论】:

是的,我最终使用了 rsvg。 Cairo 的 SVG 表面让我有些困惑。

以上是关于将 SVG 作为开罗图像表面加载的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

将 HTML 与基于 XML 的语言(如 SVG)一起使用的最佳实践是啥?

检测图像中矩形的最简单*正确*方法是啥?

在 iPhone 中延迟加载图像的最佳方式是啥?

使用 <path> 标签将图标图像转换为 svg 的最佳方法

使用 SVG(作为 PDF)的自定义 UITabBarItem 图像在 Xcode ios 中应该是啥尺寸?

将 20 GB csv 文件加载到 R 中的最佳方法是啥?