cairo + librsvg:绘制svg图标,在运行时强制显示颜色

时间:2019-02-02 22:51:56

标签: svg cairo librsvg

我在应用程序中使用了一组svg图标,并使用librsvg对其进行了绘制。这些图标都是黑色的单色图形,我只能将它们绘制为黑色,因为那是svg文件中写的颜色。

有一种方法可以在运行时选择图标的颜色(可能是Alpha通道),然后再绘制它们,而无需为我需要的任何颜色创建专用的svg文件?我可以做的librsvg忽略写在SVG文件的颜色,并用我的选择只有一个?还是其他解决方法具有相同的效果?

我正在考虑加载svg文件内容并修改内存中的颜色声明,它应该可以工作,但是我正在寻找一种更简洁的方法。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可能希望监视https://gitlab.gnome.org/GNOME/librsvg/issues/379的一种干净方法。总而言之,librsvg需要一个API来让您传递额外的CSS样式表。这样,您的形状就可以从该CSS中获取颜色。

https://gitlab.gnome.org/GNOME/gtk/issues/1471提到了GTK破解此问题的方式,您也许可以使用类似的东西。简而言之,它会创建一个包装SVG,如下所示:

<svg ...>
  <style type="text/css">
    ... extra styling here ...
  </style>
  <xi:include href="... original SVG encoded as a data:URL ..."/>
</svg>

(但请检查注释中的实际源代码以获取正确的语法!)