使用
SVG.NET
要在.NET中将SVG图像渲染为位图图像,我正在尝试在渲染期间更改图像的颜色。
E、 g.我有这个源SVG图像:
(在我的场景中,所有源SVG图像都是单色的)。
不成功的
var svgDoc = SvgDocument.Open<SvgDocument>(svgFilePath, null);
// Tried several things, all without any changes in the resulting bitmap:
svgDoc.Color = new SvgColourServer(Color.DarkGreen);
svgDoc.StopColor = new SvgColourServer(Color.DarkGreen);
svgDoc.Stroke = new SvgColourServer(Color.DarkGreen);
svgDoc.Fill = new SvgColourServer(Color.DarkGreen);
var bitmap = svgDoc.Draw();
我也检查了源代码并仔细检查了一遍,但是仍然没有找到改变颜色的方法。
我的问题是:
如何使用SVG.NET将SVG图像渲染为位图图像时更改颜色?
questions
完全或很少)
更新1:
var svgDoc = SvgDocument.Open<SvgDocument>(svgFilePath, null);
// Recursively change all nodes.
processNodes(svgDoc.Descendants(), new SvgColourServer(Color.DarkGreen));
var bitmap = svgDoc.Draw();
与此功能一起:
private void processNodes(IEnumerable<SvgElement> nodes, SvgPaintServer colorServer)
{
foreach (var node in nodes)
{
if (node.Fill != SvgPaintServer.None) node.Fill = colorServer;
if (node.Color != SvgPaintServer.None) node.Color = colorServer;
if (node.StopColor != SvgPaintServer.None) node.StopColor = colorServer;
if (node.Stroke != SvgPaintServer.None) node.Stroke = colorServer;
processNodes(node.Descendants(), colorServer);
}
}