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