【问题标题】:SVG rendering in C# with SVG library always fills shapes with black使用 SVG 库在 C# 中渲染 SVG 总是用黑色填充形状
【发布时间】:2020-04-12 03:42:05
【问题描述】:

我正在使用 Svg.Core 库(版本 3.0.49.2)将 SVG(以字符串定义)渲染为 PNG 图像。无论我做什么,任何形状似乎都是用黑色笔触和黑色填充来渲染的。

以下是我用于一个简单矩形的代码,例如:

var svgString = @"<svg width=""300"" height=""300"" xmlns=""http://www.w3.org/2000/svg"" xmlns:xlink=""http://www.w3.org/1999/xlink""><rect x=""5"" y=""5"" height=""90"" width=""50"" fill=""#ef0000"" stroke=""#00ef00"" /></svg>";
var svgDocument = SvgDocument.FromSvg<SvgDocument>(svgString);
var bitmap = svgDocument.Draw();
bitmap.Save(fileName, ImageFormat.Png);

最终渲染一个具有正确高度和宽度的矩形,但全黑:

我看到很多帖子提到了不同版本的内联样式,但是无论我使用的是 style="" 方法还是 fill="",问题仍然存在。似乎也没有指定填充颜色或使用标准颜色名称而不是 RGB 值。

感谢任何帮助或想法!

【问题讨论】:

  • 只有一个问题:您不需要对字符串中的八字形 (#) 进行编码吗?
  • 感谢@enxaneta,但我不这么认为——仅适用于 URL,不适用于代码中的字符串。我也试过像“绿色”、“红色”和“透明”这样的标准名称,没有任何变化
  • 作为一项更新,对于任何面临同样挑战的人来说,它看起来就像 SVG 库忽略了 SVG 定义中关于填充和描边的所有内容。如果您在其周围添加以下内容:svgDoc.Color = new SvgColourServer(Color.DarkGreen); svgDoc.StopColor = new SvgColourServer(Color.DarkGreen); svgDoc.Stroke = new SvgColourServer(Color.DarkGreen); svgDoc.Fill = new SvgColourServer(Color.DarkGreen);,您将在 SVG 中获得颜色。仍在深入研究。

标签: c# image svg


【解决方案1】:

我在这里想出的最佳答案来自之前的评论。如果你在它周围加上以下内容: svgDoc.Color = new SvgColourServer(Color.DarkGreen); svgDoc.StopColor = new SvgColourServer(Color.DarkGreen); svgDoc.Stroke = new SvgColourServer(Color.DarkGreen); svgDoc.Fill = new SvgColourServer(Color.DarkGreen); ,您将在 SVG 中获得颜色。将其发布为答案,以防有人遇到此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2019-03-06
    • 1970-01-01
    • 2016-07-30
    • 2021-10-24
    相关资源
    最近更新 更多