protected override void OnElementChanged(ElementChangedEventArgs<Image> e) { base.OnElementChanged(e); if (Cloth != null) { var svgStream = Cloth.SvgAssembly.GetManifestResourceStream(Cloth.SvgPath); if (svgStream == null) { throw new Exception(string.Format("Error retrieving {0} make sure Build Action is Embedded Resource", Cloth.SvgPath)); } var r = new SvgReader(new ClothStreamReader (svgStream, Cloth.Color), new StylesParser(new ValuesParser()), new ValuesParser()); var graphics = r.Graphic; var width = Cloth.WidthRequest <= 0 ? 300 : Cloth.WidthRequest; var height = Cloth.HeightRequest <= 0 ? 300 : Cloth.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; }
async void UpdateSVGSource() { Control.ContentMode = UIViewContentMode.ScaleAspectFit; Uri u; try{ u = new Uri (_formsControl.SvgPath); }catch{ Control.Image = UIImage.FromBundle (_formsControl.SvgDefaultImage); return; } var path = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments), Path.GetFileName (u.AbsolutePath)); if (!File.Exists (path)) { using (var client = new HttpClient ()) { try{ var bytes = await client.GetByteArrayAsync (_formsControl.SvgPath); File.WriteAllBytes (path, bytes); }catch{ Control.Image = UIImage.FromBundle (_formsControl.SvgDefaultImage); return; } } } var svgStream = File.OpenRead(path); if (svgStream == null) { throw new Exception(string.Format("Error retrieving {0} make sure Build Action is Embedded Resource", _formsControl.SvgPath)); } SvgReader r; try{ r = new SvgReader(new StreamReader(svgStream), new StylesParser(new ValuesParser()), new ValuesParser()); }catch{ Control.Image = UIImage.FromBundle (_formsControl.SvgDefaultImage); return; } 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; try{ var canvas = new ApplePlatform().CreateImageCanvas(graphics.Size, scale*scaleFactor); graphics.Draw(canvas); var image = canvas.GetImage(); var uiImage = image.GetUIImage(); Control.Image = uiImage; } catch{ Control.Image = UIImage.FromBundle (_formsControl.SvgDefaultImage); } }