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;
		}
示例#3
0
		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);
			}
		}