开始创建一个新的C #窗体应用程序,然后安装SVG渲染库使用NuGet包管理参考。
一、右键单击解决方案资源管理器,选择管理NuGet程序包;
这里写图片描述

二、选择联机,右上角搜索框输入SVG;
这里写图片描述

三、安装SVG Rendering Library,完成后点关闭;
这里写图片描述

四、此时svg.dll的版本可能与工程项目框架中版本不同,手动将项目版本设置为.Net FrameWork 4或其他版本;这里写图片描述

五、应用程序包含一个单独的类来保存SVG操作代码。由于图片框是一个固定大小的svgparser由按比例缩放SVG图像合适的图片框。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using Svg;

namespace Common
{
public class SVGParser
{
///
///支持的最大图像大小
///
public static Size MaximumSize { get; set; }

    /// <summary>
    /// 将SVG文件转换为位图图像。
    /// </summary>
    /// <param name="filePath">SVG图像的全路径。</param>
    /// <returns>返回转换位图图像。</returns>
    public static Bitmap GetBitmapFromSVG(string filePath)
    {
        SvgDocument document = GetSvgDocument(filePath);

        Bitmap bmp = document.Draw();
        return bmp;
    }
    /// <summary>
    /// 获取一个svgdocument操作使用提供的路径。
    /// </summary>
    /// <param name="filePath">位图图像的路径.</param>
    /// <returns>返回SVG文档</returns>
    public static SvgDocument GetSvgDocument(string filePath)
    {
        SvgDocument document = SvgDocument.Open(filePath);
        return AdjustSize(document);
    }
    /// <summary>
    /// 确保图像不超过最大大小,同时保留纵横比
    /// </summary>
    /// <param name="document">要调整大小的SVG文档</param>
    /// <returns>返回一个大小或根据该文件的原始文件。</returns>
    private static SvgDocument AdjustSize(SvgDocument document)
    {
        if (document.Height > MaximumSize.Height)
        {
            document.Width = (int)((document.Width / (double)document.Height) * MaximumSize.Height);
            document.Height = MaximumSize.Height;
        }
        return document;
    }
}

}

六、定义一个SVG全局变量:
private Svg.SvgDocument _SvgDocument;

七、将SVG图显示到图片控件pictConvertedImage中;
SVGParser.MaximumSize = new Size(pictConvertedImage.Width, pictConvertedImage.Height);
_SvgDocument = SVGParser.GetSvgDocument(svgPsth);

八、SVG图提前给要显示数据的位置绑好Text,并设置Id;
例如:这里写图片描述

九、调用递归方法获取SVG图中id=”abc”的点,绑定相应值,并设置字体颜色;
///
/// 递归在svg图上赋值
///
/// 配置列表中数据
/// Svg标识点Id
/// 对应标识点的数据
/// 颜色的RGB值
private void GetChild(SvgElement element, string Id, string value, string msgColor)
{
if ((element is SvgText) && element.ID == Id)
{
(element as SvgText).Text = value;
try
{
var fColor = Color.FromArgb(Convert.ToInt32(msgColor));
(element as SvgText).Fill = new SvgColourServer(fColor);
}
catch (Exception ex)
{
(element as SvgText).Fill = new SvgColourServer(Color.Lime);
}
}
if (element.Children.Count > 0)
{
foreach (Svg.SvgElement item in element.Children)
{
GetChild(item, Id, value, msgColor);
}
}

    十、点上帮完数据之后,重绘SVG图,当不会真正改变图片内容;
     pictConvertedImage.Image = _SvgDocument.Draw();
Logo

一站式虚拟内容创作平台,激发创意,赋能创作,进入R空间,遇见同道,让优质作品闪耀发光。​

更多推荐