c# - SVG 渐变文件不正确地渲染到图形
问题描述
我们正在动态生成指定大小的图像文件。有3层:
- 基础图像层(加载jpeg,将其调整为所需大小,用作位图)
- 渐变图像层(加载 SVG,调整大小,在基础图像层上渲染)
- 文本层(在基础图像层上渲染 + 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 可以不正确地呈现?
更新:找到原因并将其发布得更低。
解决方案
好的,所以我找到了原因,它是图形设置:
graphics.CompositingQuality = CompositingQuality.HighQuality;
删除那条线可以正确渲染渐变
推荐阅读
- django - How to query the database in Django forms?
- json - 在 cloudformation 的 yaml 中的 json 中使用 Fn::ImportValue
- single-sign-on - 如果获得无法识别的票证,Apereo CAS 可以将用户重定向到登录页面吗?
- vue.js - Vue Test Utils:未定义插槽的道具
- python - Pandas:为多索引数据帧的所有行分配一个列表
- centos7 - 无法在 /usr/local/sbin/XenConfig.pl 第 333 行连接到 MySQL 服务器
- git - 如何在服务器上 git 现有项目
- javascript - React Native Date 对象的不同行为
- python - 如何:while True 在函数 python 3
- colors - 将十六进制数转换为颜色值