C#WinForm程序调用SVG,并动态在SVG图上绑值

本文介绍如何在C#窗体应用中通过NuGet安装SVG渲染库并使用SVG图像。主要内容包括SVG文件加载、图像大小调整、转换为位图、在图片框中显示及SVG文本元素的数据绑定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开始创建一个新的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();
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值