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

开始创建一个新的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;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

}

六、定义一个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();

————————————————

版权声明:本文为CSDN博主「麦晴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/mqbeauty/article/details/70208424

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值