首页 > 解决方案 > SVG 渐变文件不正确地渲染到图形

问题描述

我们正在动态生成指定大小的图像文件。有3层:

问题在于 SVG 层,与原始层相比,它的呈现方式不同: 渲染与原始

SVG 图层渲染代码如下

private void RenderGradientLayer(Graphics mainGraphics, ImageDrawSettings settings)
{
    var gradientSvg = SvgDocument.Open(settings.FullGradientFilePath); //d:\path-to-file.svg
    var gradientBitmap = gradientSvg.Draw(settings.TargetSize, settings.TargetSize); //500x500
    mainGraphics.DrawImage(gradientBitmap, 0, 0);
}

图形设置

private static void Init(Graphics graphics)
{
    graphics.SmoothingMode = SmoothingMode.AntiAlias;
    graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
    graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
    graphics.CompositingQuality = CompositingQuality.HighQuality;
    graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
}

SVG 内容

<svg width="144" height="144" viewBox="0 0 144 144" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="144" height="144" fill="url(#paint0_linear)"/>
<defs>
<linearGradient id="paint0_linear" x1="72" y1="144" x2="72" y2="2.40787e-07" gradientUnits="userSpaceOnUse">
<stop stop-opacity="0.8"/>
<stop offset="1" stop-color="#C4C4C4" stop-opacity="0"/>
</linearGradient>
</defs>
</svg>

有什么想法为什么 SVG 可以不正确地呈现?

更新:找到原因并将其发布得更低。

标签: c#svgbitmaprendergradient

解决方案


好的,所以我找到了原因,它是图形设置:

graphics.CompositingQuality = CompositingQuality.HighQuality;

删除那条线可以正确渲染渐变


推荐阅读