using DevExpress.Drawing.Internal.Fonts.Interop; using DevExpress.Utils; using DevExpress.Utils.Svg; using System; using System.Collections.Generic; using System.Data.SqlTypes; using System.Drawing; using System.IO; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace DxHelper { public static class SvgHelper { static readonly Dictionary cache = new Dictionary(); /// /// 判断color是否为HtmlColor(HtmlColor格式如#A1B2C3) /// /// /// public static bool IsHtmlColor(string color) { if (!color.StartsWith("#")) return false; if (color.Length != 7) return false; string r = color.Substring(1, 2); string g = color.Substring(3, 2); string b = color.Substring(5, 2); bool r1 = byte.TryParse(r, System.Globalization.NumberStyles.HexNumber, null, out _); bool r2 = byte.TryParse(g, System.Globalization.NumberStyles.HexNumber, null, out _); bool r3 = byte.TryParse(b, System.Globalization.NumberStyles.HexNumber, null, out _); return r1 & r2 & r3; } /// /// 将SvgImage转换为Image对象 /// /// /// /// /// public static Image SvgToImage(SvgImage svg, int width, int height) { var img = svg.Render(new Size(width, height), null, DefaultBoolean.False, DefaultBoolean.False); return img; } /// /// 将文件转换为SvgImage对象 /// /// /// public static SvgImage LoadFromFile(string svgFile) { return SvgLoader.LoadFromFile(svgFile); } /// /// 新增图片(➕号) /// /// /// /// /// public static SvgImage CreateAdd(string color = "#039C23", int width = 24, int height = 24) { string xml = $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 编辑图片 /// /// /// /// /// public static SvgImage CreateEdit(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 移除图片(➖号) /// /// /// /// /// public static SvgImage CreateRemove(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 创建一个Svg圆.该圆的圆心在ViewBox的中心 /// /// 用于生成颜色的一个key,相同的key具有相同的颜色,当colorKey为html颜色时则使用此颜色(如#A1B2FF) /// 透明度,默认不透明 /// 视口宽度,默认32px /// 视口高度,默认32px /// 半径,默认16px /// 圆心的X轴偏移量,负向左偏移,正向右偏移,默认为0处于视口中心 /// public static SvgImage CreateCycle(string colorKey, double opacity = 1, int viewBoxWidth = 32, int viewBoxHeight = 32, int radius = 16, double offsetX = 0) { if (colorKey == null) colorKey = ""; if (cache.ContainsKey(colorKey)) return cache[colorKey]; SvgImage svg = new SvgImage(); SvgRoot root = SvgRoot.Create(new SvgElementProperties(), viewBox: new SvgViewBox(0, 0, viewBoxWidth, viewBoxHeight)); svg.Elements.Add(root); string colorStr; if (IsHtmlColor(colorKey)) colorStr = colorKey; else colorStr = ColorHelper.GetHtmlColor(colorKey); SvgElementProperties props = new SvgElementProperties { Fill = colorStr, Opacity = opacity//透明度 }; SvgCircle circle = SvgCircle.Create(props, viewBoxWidth / 2 + offsetX, viewBoxHeight / 2, radius); root.Elements.Add(circle); //SvgImage未公开Width和Height属性的公共写入,需要通过以下方式可对width和Size赋值 MemoryStream ms = new MemoryStream(); svg.Save(ms); svg = ms.ToArray(); cache.Add(colorKey, svg); ms.Dispose(); return svg; } /// /// 删除或关闭图片(一个叉叉) /// /// /// /// public static SvgImage CreateClose(string colorStr = "#D11C1C", double opacity = 1) { if (string.IsNullOrWhiteSpace(colorStr)) colorStr = $"#D11C1C"; string xml = $"\r\n\r\n\r\n\r\n"; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 清除图片(一个橡皮擦) /// /// public static SvgImage CreateClear() { string xml = $"\r\n"; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 测距图片 /// /// public static SvgImage CreateDistanceLine() { string xml = $"" + "" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 标点图片(一个五角星) /// /// /// /// /// public static SvgImage CreateMarkDot(string color = "#F12233", int width = 24, int height = 24) { string xml = $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 接收天线 /// /// /// /// /// public static SvgImage CreateAnt(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $" " + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 圆点 /// /// /// /// /// public static SvgImage CreateGeoDot(string color = "#D11C1C", int width = 24, int height = 24) { string xml = $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 五角星图片 /// /// /// /// /// public static SvgImage CreatePentagram(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 卫星图片 /// /// /// /// /// public static SvgImage CreateSat(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + $"" + $" " + $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } public static SvgImage CreateRect(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 时隙参估图片 /// /// /// /// /// public static SvgImage CreateSlotCg(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 导出图像图片 /// /// public static SvgImage CreateExportImg() { string xml = $"" + "\r\n\r\n\r\n\r\n\r\n\t\r\n" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 导出Excel图片 /// /// public static SvgImage CreateExportXlsx() { string xml = $"" + "\r\n\r\n\r\n\r\n\r\n\t\r\n" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 导出Csv图片 /// /// public static SvgImage CreateExportCsv() { string xml = $"" + "\r\n\r\n" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 时差线图片 /// /// public static SvgImage CreateDtoLine(string color = "#039C23", int width = 24, int height = 24) { string xml = $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 频差线图片 /// /// public static SvgImage CreateDfoLine(string color = "#039C23", int width = 24, int height = 24) { string xml = $"" + $"" + $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 测向线图片 /// /// public static SvgImage CreateCxLine(string color1 = "#FFB115", string color2 = "#039C23", int width = 24, int height = 24) { string xml = $"" + $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// GDOP /// /// public static SvgImage CreateGDOP(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 查看参估结果 /// /// public static SvgImage CreateShowCafRes(string color = "#387CB7", int width = 24, int height = 24) { string xml = $"" + $"" + $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 查看测向结果 /// /// public static SvgImage CreateShowCxRes(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 查看检测结果 /// /// public static SvgImage CreateShowCheckRes(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 手动定位 /// /// public static SvgImage CreatePosManual(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 重新定位 /// /// public static SvgImage CreateRepos(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 使用镜像点 /// /// public static SvgImage CreateUseMirr(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 跳转|转到 /// /// public static SvgImage CreateGoto(string color = "#1177D7", int width = 24, int height = 24) { string xml = $"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } /// /// 信号识别 /// /// public static SvgImage CreateSigProc(int width = 24, int height = 24) { string xml = $"" + $"" +$"" + $"" + ""; MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xml)); var svg = SvgLoader.LoadFromStream(ms); ms.Dispose(); return svg; } } }