public static Graphic LoadSvg(TextReader reader) { var valuesParser = new ValuesParser(); var svgr = new SvgReader(reader, new StylesParser(valuesParser), valuesParser); return(svgr.Graphic); }
public static Graphic Read(string path) { using (var s = OpenResource(path)) { var r = new SvgReader(new StreamReader(s)); return(r.Graphic); } }
public void EmptyElementHasZeroPolygons() { var reader = new SvgReader(new System.Xml.Linq.XElement("test")); IEnumerable <Polygon> lp = reader.ExtractPolygons(); Assert.AreEqual(0, lp.Count()); }
public async Task <IImage> GetSvgImage(string path, float width, float height, CancellationToken token) { return(await Task <IImage> .Factory.StartNew(() => { var assembly = typeof(ToolbarItemEx).Assembly; var fullPath = $"ToolbarBadgeSample.Resources.Images.{path}"; using (var resource = assembly.GetManifestResourceStream(fullPath)) { if (resource == null) { throw new Exception( $"Error retrieving {path} make sure Build Action is Embedded Resource. Full path {fullPath}"); } var svg = new SvgReader(new StreamReader(resource)); var outputSize = svg.Graphic.Size; if (width > 0 && height > 0) { outputSize = new Size(width, height); var scale = svg.Graphic.Size.ScaleThatFits(outputSize); svg.Graphic.ViewBox = new Rect(Point.Zero, svg.Graphic.Size / scale); } var imageCanvas = _platform.CreateImageCanvas(outputSize, _scale); svg.Graphic.Draw(imageCanvas); return imageCanvas.GetImage(); } }, token)); }
Graphic ReadString(string svg, Brush defaultBrush = null) { var r = new SvgReader(svg, defaultBrush: defaultBrush); Assert.IsTrue(r.Graphic.Children.Count >= 0); return(r.Graphic); }
public static async Task <Bitmap> GetBitmapAsync(SvgImage svgImage, int width, int height) { Bitmap result = null; Stream svgStream = await SvgService.GetSvgStreamAsync(svgImage).ConfigureAwait(false); await Task.Run(() => { var svgReader = new SvgReader(new StreamReader(svgStream)); var graphics = svgReader.Graphic; var scale = 1.0; if (height >= width) { scale = height / graphics.Size.Height; } else { scale = width / graphics.Size.Width; } var canvas = new AndroidPlatform().CreateImageCanvas(graphics.Size, scale); graphics.Draw(canvas); var image = (BitmapImage)canvas.GetImage(); result = image.Bitmap; }); return(result); }
Graphic ReadString(string svg) { var r = new SvgReader(new StringReader(svg)); Assert.IsTrue(r.Graphic.Children.Count >= 0); return(r.Graphic); }
public void Load(string data) { var reader = new SvgReader(data); g = reader.Graphic; RefreshDraw(); }
public new void ReadContent(XmlElement xmlElement, SvgReader svgReader) { base.ReadContent(xmlElement, svgReader); _text = null; foreach (var node in xmlElement.ChildNodes) { var childElement = node as XmlElement; if (childElement != null) { var svgNode = svgReader.CreateSvgNodeFromXml(childElement); svgReader.Read(svgNode, childElement); if (svgNode is SvgText) { _text = svgNode as SvgText; } } if (_text != null) { break; } } if (_text != null) { ReadText(_text); } else { throw new SvgParseException(Resources.Exceptions.CanNotParseSvgVoText); } }
public static DrawingImage Open(string fileName) { using (FileStream stream = new FileStream(imagesPath + fileName, FileMode.Open, FileAccess.Read)) { return(SvgReader.Load(stream)); } }
public void Deserialize(Stream stream, ICanvas canvas) { try { using (var packageStorage = BaseArchive.CreateArchive(stream)) { var xmlDoc = new XmlDocument(); using (var outStream = packageStorage.GetReadStream(_canvasFileName)) xmlDoc.Load(outStream); var svgReader = new SvgReader(new TypeResolver(), new VoAttributeReader()); var svgDoc = svgReader.CreateSvgNodeFromXml(xmlDoc.DocumentElement) as SvgDocument; svgReader.Read(svgDoc, xmlDoc.DocumentElement); var svgConverter = new SvgConverter(packageStorage); svgConverter.FromSvg(canvas, svgDoc); using (var cmykProfileStream = packageStorage.GetReadStream(Path.Combine(_iccFolder, _cmykProfileFileName))) canvas.CmykColorProfile = new ColorProfile(cmykProfileStream); using (var grayscaleProfileStream = packageStorage.GetReadStream(Path.Combine(_iccFolder, _grayscaleProfileFileName))) canvas.GrayscaleColorProfile = new ColorProfile(grayscaleProfileStream); using (var rgbProfileStream = packageStorage.GetReadStream(Path.Combine(_iccFolder, _rgbProfileFileName))) canvas.RgbColorProfile = new ColorProfile(rgbProfileStream); } } catch (Exception ex) { Configuration.Logger.Error(Exceptions.CanNotDeserializeCanvas, ex); throw new SerializationException(Exceptions.CanNotDeserializeCanvas, ex); } }
public void ReadContent(XmlElement xmlElement, SvgReader svgReader) { _background = null; _border = null; foreach (var node in xmlElement.ChildNodes) { var childElement = node as XmlElement; if (childElement != null && childElement.Name != "clipPath") { var svgNode = svgReader.CreateSvgNodeFromXml(childElement); svgReader.Read(svgNode, childElement); if (svgNode is SvgVoContent) { Content = svgNode as SvgVoContent; } else if (svgNode is SvgPath) { var path = svgNode as SvgPath; if (path.ID.Contains("_background")) { _background = path; } else if (path.ID.Contains("_border")) { _border = path; } } else if (svgNode is SvgRect) { var rect = svgNode as SvgRect; if (rect.ID.Contains("_background")) { _background = RectToPath(rect); } else if (rect.ID.Contains("_border")) { _border = RectToPath(rect); } } } if (_background != null && _border != null && Content != null) { break; } } if (_background != null && _border != null) { Path = _border.Path; Fill = _background.Fill; Stroke = _border.Stroke; StrokeWidth = _border.StrokeWidth; } else { throw new SvgParseException(Resources.Exceptions.CanNotParseSvgVoPlaceholder); } }
private DrawingImage SvgToimge(string name) { DrawingImage svg_image; string file_name = AppDomain.CurrentDomain.BaseDirectory + @"\Resources\" + name.ToString(); using (FileStream file_stream = new FileStream(file_name, FileMode.Open, FileAccess.Read)) svg_image = SvgReader.Load(file_stream, new SvgReaderOptions(false)); return(svg_image); }
/// <summary> /// 将SVG矢量图转换为可用资源 /// 用法<Image Source="{Binding ConverterParameter=pc_Button_search.svg, Converter={StaticResource SvgToXamlConverter}, Mode=OneWay}" /> /// </summary> /// <param name="value"></param> /// <param name="targetType"></param> /// <param name="parameter"></param> /// <param name="culture"></param> /// <returns></returns> public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { DrawingImage svg_image; string file_name = AppDomain.CurrentDomain.BaseDirectory + @"\Resources\" + parameter.ToString(); using (FileStream file_stream = new FileStream(file_name, FileMode.Open, FileAccess.Read)) svg_image = SvgReader.Load(file_stream, new SvgReaderOptions(false)); return(svg_image); }
public async void Render( ) { //added check because both *may* not be set at the same time, this negates the error throwing unfortuantely. --bwc if (String.IsNullOrEmpty(Element.SvgPath) || (Element.SvgAssembly == null)) { return; } if (_formsControl != null) { await Task.Run(async( ) => { Stream svgStream = _formsControl.SvgAssembly.GetManifestResourceStream(_formsControl.SvgPath); if (svgStream == null) { throw new Exception(string.Format("Error retrieving {0} make sure Build Action is Embedded Resource", _formsControl.SvgPath)); } SvgReader r = new SvgReader(new StreamReader(svgStream), new StylesParser(new ValuesParser( )), new ValuesParser( )); this.ReplaceColors(r.Graphic, Element.ReplacementColors); Graphic graphics = r.Graphic; int width = PixelToDP((int)_formsControl.WidthRequest <= 0 ? 100 : (int)_formsControl.WidthRequest); int height = PixelToDP((int)_formsControl.HeightRequest <= 0 ? 100 : (int)_formsControl.HeightRequest); double scale = 1.0; if (height >= width) { scale = height / graphics.Size.Height; } else { scale = width / graphics.Size.Width; } IImageCanvas canvas = new AndroidPlatform( ).CreateImageCanvas(graphics.Size, scale); graphics.Draw(canvas); BitmapImage image = (BitmapImage)canvas.GetImage( ); return(image); }).ContinueWith(taskResult => { Device.BeginInvokeOnMainThread(() => { var imageView = new ImageView(Context); imageView.SetScaleType(ImageView.ScaleType.FitXy); imageView.SetImageBitmap(taskResult.Result.Bitmap); SetNativeControl(imageView); }); }); } }
public static DrawingImage SvgIcon(String path) { string filePath = System.IO.Path.GetFullPath(path); using (FileStream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { DrawingImage image = SvgReader.Load(stream); return(image); } }
Graphic Read(string path) { using (var s = OpenResource(path)) { var r = new SvgReader(new StreamReader(s)); Assert.IsTrue(r.Graphic.Children.Count >= 0); Assert.IsTrue(r.Graphic.Size.Width > 1); Assert.IsTrue(r.Graphic.Size.Height > 1); return(r.Graphic); } }
public void XmlWithOneElementHasOnePolygon() { var reader = new SvgReader(System.Xml.Linq.XElement.Parse( " <svg><polygon\n points=\"1088.95,2511.82 1169.85,2570.6 1138.95,2475.49 1058.05,2416.71 \" transform=\"matrix(0.05880683,0,0,0.0624649,-51.602926,-159.78388)\" /></svg>" )); IEnumerable <Polygon> lp = reader.ExtractPolygons(); Assert.AreEqual(1, lp.Count()); }
public void XmlWithOneElementHasCorrectPolygon() { var reader = new SvgReader(System.Xml.Linq.XElement.Parse( " <svg><polygon\n points=\"1088.95,2511.82 1169.85,2570.6 1138.95,2475.49 1058.05,2416.71 \" /></svg>" )); IEnumerable <Polygon> lp = reader.ExtractPolygons(); Assert.IsTrue(lp.Where(poly => poly.Vertices.Where(pt => Math.Abs(pt.X - 1058.05) < 1e-8 && Math.Abs(pt.Y - 2416.71) < 1e-8).Any()).Any()); }
Graphic Read (string path) { using (var s = OpenResource (path)) { var r = new SvgReader (new StreamReader (s)); Assert.IsTrue (r.Graphic.Children.Count >= 0); Assert.IsTrue (r.Graphic.Size.Width > 1); Assert.IsTrue (r.Graphic.Size.Height > 1); return r.Graphic; } }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if (parameter == null) { return(null); } var directory = AppDomain.CurrentDomain.BaseDirectory; var path = directory + parameter; using var stream = new FileStream(path, FileMode.Open, FileAccess.Read); return(SvgReader.Load(stream)); }
protected override async void OnElementChanged(ElementChangedEventArgs <SvgImage> e) { base.OnElementChanged(e); if (_formsControl != null) { await Task.Run(async() => { var svgStream = _formsControl.SvgAssembly.GetManifestResourceStream(_formsControl.SvgPath); if (svgStream == null) { throw new Exception(string.Format("Error retrieving {0} make sure Build Action is Embedded Resource", _formsControl.SvgPath)); } var r = new SvgReader(new StreamReader(svgStream), new StylesParser(new ValuesParser()), new ValuesParser()); var graphics = r.Graphic; var width = PixelToDP((int)_formsControl.WidthRequest <= 0 ? 100 : (int)_formsControl.WidthRequest); var height = PixelToDP((int)_formsControl.HeightRequest <= 0 ? 100 : (int)_formsControl.HeightRequest); var scale = 1.0; if (height >= width) { scale = height / graphics.Size.Height; } else { scale = width / graphics.Size.Width; } var canvas = new AndroidPlatform().CreateImageCanvas(graphics.Size, scale); graphics.Draw(canvas); var image = (BitmapImage)canvas.GetImage(); return(image); }).ContinueWith(taskResult => { Device.BeginInvokeOnMainThread(() => { var imageView = new ImageView(Context); imageView.SetScaleType(ImageView.ScaleType.CenterInside); imageView.SetImageBitmap(taskResult.Result.Bitmap); SetNativeControl(imageView); }); }); } }
public void XmlWithTwoElementHasTwoPolygons() { var reader = new SvgReader(System.Xml.Linq.XElement.Parse( "<svg>" + "<polygon\n points=\"1,2 3,4 5,6 \" />" + "<polygon\n points=\"1088.95,2511.82 1169.85,2570.6 1138.95,2475.49 1058.05,2416.71 \"/></svg>" )); IEnumerable <Polygon> lp = reader.ExtractPolygons(); Assert.AreEqual(2, lp.Count()); }
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { // here you can return DrawingImage based on value that represents name field of your structure // just for example the piece of your code: if (value is string && !String.IsNullOrEmpty(value as string)) { return(SvgReader.Load(new MemoryStream(new System.Net.WebClient().DownloadData(value as string)))); } else { // if value is null or not of string type return(yourDefaultImage); } }
Graphic Read(string path, Brush defaultBrush = null, Font defaultFont = null) { using (var s = OpenResource(path)) { var r = new SvgReader(new StreamReader(s), defaultBrush: defaultBrush, defaultFont: defaultFont); if (r.Errors.Count > 0) { throw new Exception("Error while reading", r.Errors[0]); } Assert.IsTrue(r.Graphic.Children.Count >= 0); Assert.IsTrue(r.Graphic.Size.Width > 1); Assert.IsTrue(r.Graphic.Size.Height > 1); return(r.Graphic); } }
Graphic ReadString(string svg, Brush defaultBrush = null, Font defaultFont = null) { var r = new SvgReader(svg, defaultBrush: defaultBrush, defaultFont: defaultFont); Assert.IsTrue(r.Graphic.Children.Count >= 0); if (r.Errors.Count > 0) { throw new Exception("Error while reading", r.Errors[0]); } Assert.IsTrue(r.Graphic.Children.Count >= 0); Assert.IsTrue(r.Graphic.Size.Width > 1); Assert.IsTrue(r.Graphic.Size.Height > 1); return(r.Graphic); }
public void OneStrokeIsFound() { var source = System.Xml.Linq.XElement.Parse( "<svg>" + "<polygon\n points=\"1,2 3,4 5,6 \" style=\"fill:#bbbbcc;stroke:#00aaff;stroke-width:1\"/>" + "</svg>" ); var reader = new SvgReader(source); List <SvgObjectProperty> strokes = reader.ReadObjectProperties().Where(s => s.Type == SvgPropertyType.Stroke).ToList(); Assert.AreEqual(1, strokes.Count); Assert.AreEqual("stroke:#00aaff", strokes[0].Color); }
private void EventSink_ImportSvgRequested() { this.BeginInvoke((MethodInvoker) delegate() { var dialog = SetupImportSvgDialog; if (dialog.ShowDialog() == DialogResult.OK) { var filePath = dialog.FileName; SvgReader reader = new SvgReader(filePath); } }); }
public static ImageSource LoadSvg(string filename) { var info = Load(filename); if (info == null) { return(null); } using (var stream = info.Stream) { return(SvgReader.Load(stream)); } }
public void DefaultFillForUndefinedColor() { var source = System.Xml.Linq.XElement.Parse( "<svg>" + "<polygon\n points=\"1,2 3,4 5,6 \" style=\"fill:#bcdaa0;stroke:#000000;stroke-width:1\"/>" + "</svg>" ); var reader = new SvgReader(source); IEnumerable <Polygon> lp = reader.ExtractPolygons(); Assert.AreEqual("fill:#bcdaa0", lp.First().Color); }
public void XmlWithTwoNestedElementsHasTwoPolygons() { var reader = new SvgReader(System.Xml.Linq.XElement.Parse( "<svg>" + "<polygon\n points=\"1,2 3,4 5,6 \"/>" + "<group>" + "<polygon\n points=\"3,4 5,6 7,8\"/>" + "</group>" + "</svg>" )); IEnumerable <Polygon> lp = reader.ExtractPolygons(); Assert.AreEqual(2, lp.Count()); }
protected override void OnElementChanged(ElementChangedEventArgs<Image> e) { base.OnElementChanged(e); if (_formsControl != null) { var svgStream = _formsControl.SvgAssembly.GetManifestResourceStream(_formsControl.SvgPath); if (svgStream == null) { throw new Exception(string.Format("Error retrieving {0} make sure Build Action is Embedded Resource", _formsControl.SvgPath)); } var r = new SvgReader(new StreamReader(svgStream), new StylesParser(new ValuesParser()), new ValuesParser()); var graphics = r.Graphic; var width = _formsControl.WidthRequest <= 0 ? 100 : _formsControl.WidthRequest; var height = _formsControl.HeightRequest <= 0 ? 100 : _formsControl.HeightRequest; var scale = 1.0; if (height >= width) { scale = height/graphics.Size.Height; } else { scale = width/graphics.Size.Width; } var scaleFactor = UIScreen.MainScreen.Scale; var canvas = new ApplePlatform().CreateImageCanvas(graphics.Size, scale*scaleFactor); graphics.Draw(canvas); var image = canvas.GetImage(); var uiImage = image.GetUIImage(); Control.Image = uiImage; } }
public static async Task<Bitmap> GetBitmapAsync (SvgImage svgImage, int width, int height) { Bitmap result = null; Stream svgStream = await SvgService.GetSvgStreamAsync (svgImage).ConfigureAwait (false); await Task.Run(() => { var svgReader = new SvgReader(new StreamReader(svgStream), new StylesParser(new ValuesParser()), new ValuesParser()); var graphics = svgReader.Graphic; var newWidth = svgImage.WidthRequest == 0 ? 100 : svgImage.WidthRequest; var newHeight = svgImage.HeightRequest == 0 ? 100 : svgImage.HeightRequest; var scale = 1.0; if (height >= width) { scale = height / graphics.Size.Height; } else { scale = width / graphics.Size.Width; } var canvas = new AndroidPlatform().CreateImageCanvas(graphics.Size, scale); graphics.Draw(canvas); var image = (BitmapImage)canvas.GetImage(); result = image.Bitmap; //result = SvgFactory.GetBitmap(svgStream, width, height); }); return result; }
void ParseSVG() { Task.Run(() => { string svg = null; CoreGraphics.CGRect previewSize = CoreGraphics.CGRect.Empty; string error = null; this.InvokeOnMainThread (() => { Prev.Drawables = null; previewSize = Prev.Bounds; svg = Code; }); try { var reader = new SvgReader(new System.IO.StringReader(svg)); if (reader.Graphic != null) { if (reader.Graphic.Size.Height == 0 || reader.Graphic.Size.Width == 0) reader.Graphic.Size = new Size(previewSize.Width, previewSize.Height); Prev.Drawables = new IDrawable[] { reader.Graphic }; } } catch (Exception ex) { error = ex.Message; } this.BeginInvokeOnMainThread(() => { if (!string.IsNullOrEmpty(error)) { Errors.Value = error; Errors.TextColor = NSColor.Red; } else { Errors.Value = ""; } Prev.SetNeedsDisplayInRect (previewSize); }); }); }
public static Graphic LoadSvg(TextReader reader) { var valuesParser = new ValuesParser(); var svgr = new SvgReader(reader, new StylesParser(valuesParser),valuesParser); return svgr.Graphic; }