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)
svg图{
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();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论