示例#1
0
        public byte[] Render(VisualElement formsView)
        {
            UIView view = ConvertToNative(formsView);

            if (view == null)
            {
                return(new byte[0]);
            }

            var     renderer = new UIGraphicsImageRenderer(view.Bounds.Size);
            UIImage image    = renderer.CreateImage((rendererContext) => {
                view.Layer.RenderInContext(rendererContext.CGContext);
            });

            if (image == null)
            {
                return(new byte[0]);
            }

            NSData imageData = image.AsPNG();

            if (imageData == null)
            {
                return(new byte[0]);
            }

            return(imageData.ToArray());
        }
示例#2
0
        partial void AddAsset(NSObject sender)
        {
            var rnd = new Random();

            // Create a random dummy image.
            var size = (rnd.Next(0, 2) == 0)
                                ? new CGSize(400f, 300f)
                                : new CGSize(300f, 400f);

            var renderer = new UIGraphicsImageRenderer(size);
            var image    = renderer.CreateImage(context => {
                UIColor.FromHSBA((float)rnd.NextDouble(), 1, 1, 1).SetFill();
                context.FillRect(context.Format.Bounds);
            });

            // Add it to the photo library
            PHPhotoLibrary.SharedPhotoLibrary.PerformChanges(() => {
                PHAssetChangeRequest creationRequest = PHAssetChangeRequest.FromImage(image);

                if (AssetCollection != null)
                {
                    var addAssetRequest = PHAssetCollectionChangeRequest.ChangeRequest(AssetCollection);
                    addAssetRequest.AddAssets(new PHObject [] {
                        creationRequest.PlaceholderForCreatedAsset
                    });
                }
            }, (success, error) => {
                if (!success)
                {
                    Console.WriteLine(error.LocalizedDescription);
                }
            });
        }
示例#3
0
        public UIImage RenderParts()
        {
            // Determine which parts to draw.
            IceCreamPart[] allParts   = { Topping, Scoops, Base };
            var            partImages = allParts.Where(p => p != null && p.Image != null).Select(p => p.StickerImage);

            // Calculate the size of the composited ice cream parts image.
            var outputImageSize = CGSize.Empty;

            outputImageSize.Width  = partImages.OrderByDescending(i => i.Size.Width).FirstOrDefault().Size.Width;
            outputImageSize.Height = (nfloat)partImages.Sum(i => i.Size.Height);

            // Render the part images into a single composite image.
            var renderer = new UIGraphicsImageRenderer(outputImageSize);
            var image    = renderer.CreateImage(context => {
                // Draw each of the body parts in a vertica stack.
                nfloat nextYPosition = 0f;
                foreach (var partImage in partImages)
                {
                    var position = new CGPoint(outputImageSize.Width / 2f - partImage.Size.Width / 2f, nextYPosition);

                    partImage.Draw(position);
                    nextYPosition += partImage.Size.Height;
                }
            });

            return(image);
        }
示例#4
0
        UIImage CreateImage(CGSize size, UIColor [] colors)
        {
            // Perform some time-consuming drawing, using some colors of our choice.
            // This example just draws a lot of random circles.
            var renderer = new UIGraphicsImageRenderer(size);

            return(renderer.CreateImage(context => {
                var random = new Random(DateTime.Now.Millisecond);
                for (int i = 0; i <= 25000; i++)
                {
                    var colorIndex = random.Next(0, colors.Length);
                    var color = colors [colorIndex];

                    color.SetFill();

                    var rectX = random.NextDouble() * size.Width;
                    var rectY = random.NextDouble() * size.Height;
                    var s = random.NextDouble() * 80;

                    var rect = new CGRect(rectX, rectY, s, s);
                    var path = UIBezierPath.FromOval(rect);

                    path.Fill();
                }
            }));
        }
        public void GenView(MKClusterAnnotation cluster)
        {
            AnnotationViewSize annotationSize = MapSettings.AnnotationSize;

            if (cluster != null)
            {
                var renderer = new UIGraphicsImageRenderer(new CGSize(annotationSize.Width,
                                                                      annotationSize.Height));
                var count = cluster.MemberAnnotations.Length;

                Image = renderer.CreateImage((context) => {
                    //circle
                    UIColor.FromRGB(230, 141, 119).SetFill();
                    UIBezierPath.FromOval(new CGRect(0,
                                                     0,
                                                     annotationSize.Width,
                                                     annotationSize.Height)).Fill();

                    //text
                    var attributes = new UIStringAttributes()
                    {
                        ForegroundColor = UIColor.Black,
                        Font            = UIFont.BoldSystemFontOfSize(20)
                    };
                    var text = new NSString($"{count}");
                    var size = text.GetSizeUsingAttributes(attributes);
                    var rect = new CGRect(20 - size.Width / 2, 20 - size.Height / 2, size.Width, size.Height);
                    text.DrawString(rect, attributes);
                });
            }
        }
示例#6
0
        public static UIImage?ConvertToImage(this UIView view)
        {
            var imageRenderer = new UIGraphicsImageRenderer(view.Bounds.Size);

            return(imageRenderer.CreateImage((a) =>
            {
                view.Layer.RenderInContext(a.CGContext);
            }));
        }
示例#7
0
        /// <summary>
        /// resizes an UIImage to 1% of size
        /// </summary>
        /// <param name="image">original image</param>
        /// <returns>resized image</returns>
        public static UIImage Resize(UIImage image)
        {
            CGSize canvas = new CGSize(
                width: image.Size.Width * 0.1,
                height: image.Size.Height * 0.1
                );
            UIGraphicsImageRendererFormat format   = new UIGraphicsImageRendererFormat();
            UIGraphicsImageRenderer       rendered = new UIGraphicsImageRenderer(size: canvas);
            var ret_image = rendered.CreateImage(actions: null);

            return(ret_image);
        }
示例#8
0
        public UIImage RenderSticker(bool opaque)
        {
            var partsImage = RenderParts();

            if (partsImage == null)
            {
                return(null);
            }

            // Determine the size to draw as a sticker.
            CGSize outputSize   = CGSize.Empty;
            CGSize iceCreamSize = CGSize.Empty;

            if (opaque)
            {
                // Scale the ice cream image to fit in the center of the sticker.
                var scale = NMath.Min((size.Width - opaquePadding.Width) / partsImage.Size.Height, (size.Height - opaquePadding.Height) / partsImage.Size.Width);
                iceCreamSize = new CGSize(partsImage.Size.Width * scale, partsImage.Size.Height * scale);
                outputSize   = size;
            }
            else
            {
                // Scale the ice cream to fit it's height into the sticker.
                var scale = size.Width / partsImage.Size.Height;
                iceCreamSize = new CGSize(partsImage.Size.Width * scale, partsImage.Size.Height * scale);
                outputSize   = iceCreamSize;
            }

            // Scale the ice cream image to the correct size.
            var renderer = new UIGraphicsImageRenderer(outputSize);
            var image    = renderer.CreateImage((context) => {
                UIColor backgroundColor = opaque ? UIColor.FromRGBA(250f / 255f, 225f / 255f, 235f / 255f, 1f) : UIColor.Clear;

                // Draw the background
                backgroundColor.SetFill();
                context.FillRect(new CGRect(CGPoint.Empty, size));

                // Draw the scaled composited image.
                var drawRect = new CGRect {
                    Size = iceCreamSize,
                    X    = outputSize.Width / 2f - iceCreamSize.Width / 2f,
                    Y    = outputSize.Height / 2f - iceCreamSize.Height / 2f
                };

                partsImage.Draw(drawRect);
            });

            return(image);
        }
示例#9
0
        private void RedrawFilterView()
        {
            var isAnimationEnabled = IsAnimationAllowed();

            if (!isAnimationEnabled)
            {
                return;
            }

            var scale        = UIScreen.MainScreen.Scale;
            var radius       = (float)(UIScreen.MainScreen.Bounds.Width >= 414 ? kBlurRadiusIphonePlus : kBlurRadiusDefault);
            var bottomMargin = 10f;
            var offsetY      = -contentView.Bounds.Height / 2;
            var bounds       = new CGRect(valueView.Frame.X, offsetY, valueView.Frame.Size.Width, -offsetY + bottomMargin).Inset(-radius, 0);

            var inputImage = new UIGraphicsImageRenderer(Bounds.Size).CreateImage(
                (obj) => contentView.Layer.RenderInContext(obj.CGContext)
                );

            filter.BlurRadius         = radius;
            filter.Threshold          = 0.49f;
            filter.BackgroundColor    = contentViewColor;
            filter.AntialiasingRadius = (float)(scale / 2);
            filter.InputImage         = new CIImage(inputImage.CGImage);

            var outputImage = filter.OutputImage?.ImageByCroppingToRect(
                new CGRect(0, 0, inputImage.Size.Width * scale, inputImage.Size.Height * scale));
            var cgImage = context.CreateCGImage(outputImage, outputImage.Extent);

            filterView.Image = UIImage.FromImage(cgImage, scale, UIImageOrientation.Up);
            filterView.Frame = bounds;

            if (filterViewMask == null)
            {
                var renderer = new UIGraphicsImageRenderer(new CGRect(new CGPoint(), Bounds.Size).Size);
                filterViewMask = renderer.CreateImage((ctx) =>
                {
                    UIColor.White.SetFill();
                    ctx.FillRect(new CGRect(new CGPoint(), bounds.Size));
                    ctx.CGContext.ClearRect(new CGRect(0, bounds.Size.Height - bottomMargin, radius, bottomMargin));
                    ctx.CGContext.ClearRect(new CGRect(bounds.Size.Width - radius, bounds.Size.Height - bottomMargin, radius, bottomMargin));
                });
                ((UIImageView)filterView.MaskView).Image = filterViewMask;
            }
        }
示例#10
0
        public static UIImage ConvertToImage(this UIView view)
        {
            if (!Forms.IsiOS10OrNewer)
            {
                UIGraphics.BeginImageContext(view.Frame.Size);
                view.Layer.RenderInContext(UIGraphics.GetCurrentContext());
                var image = UIGraphics.GetImageFromCurrentImageContext();
                UIGraphics.EndImageContext();
                return(new UIImage(image.CGImage));
            }

            var imageRenderer = new UIGraphicsImageRenderer(view.Bounds.Size);

            return(imageRenderer.CreateImage((a) =>
            {
                view.Layer.RenderInContext(a.CGContext);
            }));
        }
示例#11
0
        /// <summary>
        /// Generates and returns a thumbnail for the image using scale aspect fill.
        /// </summary>
        UIImage GenerateThumbnail(UIImage forImage, CGSize thumbnailSize)
        {
            var imageSize = forImage.Size;

            var widthRatio  = thumbnailSize.Width / imageSize.Width;
            var heightRatio = thumbnailSize.Height / imageSize.Height;
            var scaleFactor = widthRatio > heightRatio ? widthRatio : heightRatio;

            var renderer     = new UIGraphicsImageRenderer(thumbnailSize);
            var newThumbnail = renderer.CreateImage((err) =>
            {
                var size = new CGSize(imageSize.Width * scaleFactor, imageSize.Height * scaleFactor);
                var x    = (thumbnailSize.Width - size.Width) / 2.0;
                var y    = (thumbnailSize.Height - size.Height) / 2.0;
                forImage.Draw(new CGRect(new CGPoint(x, y), size));
            });

            return(newThumbnail);
        }
示例#12
0
        private UIImage imageWithColor(UIColor imgColor)
        {
            var imgRenderer = new UIGraphicsImageRenderer(new CGSize(1, 1));
            var img         = imgRenderer.CreateImage((UIGraphicsImageRendererContext ctxt) =>
            {
                var superRed = UIColor.FromDisplayP3(1.358f, -0.074f, -0.012f, 1.0f);
                superRed.SetFill();
                UIColor.Black.SetStroke();
                var path = new UIBezierPath();
                path.MoveTo(new CGPoint(10, 10));
                path.AddLineTo(new CGPoint(90, 10));
                path.AddLineTo(new CGPoint(45, 90));
                path.ClosePath();
                path.Stroke();
                path.Fill();
            });

            return(img);
        }
示例#13
0
        public byte[] GetViewImage(View formsView)
        {
            var view = Platform.GetRenderer(formsView).NativeView;


            var renderer = new UIGraphicsImageRenderer(view.Bounds.Size);
            var jpgData  = renderer.CreatePng(ctx =>
            {
                view.Alpha = 1.0f;
                view.Layer.RenderInContext(ctx.CGContext);
                view.Alpha = 0.0f;
            });
            var bytes = new byte[jpgData.Length];

            System.Runtime.InteropServices.Marshal.Copy(jpgData.Bytes, bytes, 0, Convert.ToInt32(jpgData.Length));

            return(bytes);


            //UIGraphics.BeginImageContextWithOptions(view.Bounds.Size, true, 0);
            //view.Alpha = 1.0f;
            //view.Layer.RenderInContext(UIGraphics.GetCurrentContext());
            //view.Alpha = 0.0f;
            //var img = UIGraphics.GetImageFromCurrentImageContext();
            //UIGraphics.EndImageContext();
            //var imgData = img;


            //UIGraphics.BeginImageContextWithOptions(view.Bounds.Size, view.Opaque, 1);
            //view.DrawViewHierarchy(view.Frame, false); //this was key line
            //UIImage imgData = UIGraphics.GetImageFromCurrentImageContext();
            //UIGraphics.EndImageContext();



            //var jpgData = imgData.AsJPEG();
            //var bytes = new byte[jpgData.Length];
            //System.Runtime.InteropServices.Marshal.Copy(jpgData.Bytes, bytes, 0, Convert.ToInt32(jpgData.Length));


            //return bytes;
        }
示例#14
0
        public static UIImage Convert(string pdfPath, bool directLink)
        {
            var localDocUrl = directLink ? pdfPath : Path.Combine(NSBundle.MainBundle.BundlePath, pdfPath);

            var document = new CGPDFDocument(new CGDataProvider(localDocUrl));
            var page     = document.GetPage(1);

            var pageRect = page.GetBoxRect(CGPDFBox.Media);
            var renderer = new UIGraphicsImageRenderer(pageRect.Size);
            var img      = renderer.CreateImage(ctx => {
                UIColor.White.SetFill();
                ctx.FillRect(pageRect);

                ctx.CGContext.TranslateCTM(0, pageRect.Size.Height);
                ctx.CGContext.ScaleCTM(1, -1);
                ctx.CGContext.DrawPDFPage(page);
            });

            return(img);
        }
示例#15
0
        public static UIImage?ConvertToImage(this UIView view)
        {
            if (!NativeVersion.IsAtLeast(10))
            {
                UIGraphics.BeginImageContext(view.Frame.Size);
                view.Layer.RenderInContext(UIGraphics.GetCurrentContext());
                var image = UIGraphics.GetImageFromCurrentImageContext();
                UIGraphics.EndImageContext();

                if (image.CGImage == null)
                {
                    return(null);
                }

                return(new UIImage(image.CGImage));
            }

            var imageRenderer = new UIGraphicsImageRenderer(view.Bounds.Size);

            return(imageRenderer.CreateImage((a) =>
            {
                view.Layer.RenderInContext(a.CGContext);
            }));
        }
		partial void AddAsset (NSObject sender)
		{
			var rnd = new Random ();
				
			// Create a random dummy image.
			var size = (rnd.Next (0, 2) == 0)
				? new CGSize (400f, 300f)
				: new CGSize (300f, 400f);

			var renderer = new UIGraphicsImageRenderer (size);
			var image = renderer.CreateImage (context => {
				UIColor.FromHSBA ((float)rnd.NextDouble (), 1, 1, 1).SetFill ();
				context.FillRect (context.Format.Bounds);
			});

			// Add it to the photo library
			PHPhotoLibrary.SharedPhotoLibrary.PerformChanges (() => {
				PHAssetChangeRequest creationRequest = PHAssetChangeRequest.FromImage (image);

				if (AssetCollection != null) {
					var addAssetRequest = PHAssetCollectionChangeRequest.ChangeRequest (AssetCollection);
					addAssetRequest.AddAssets (new PHObject [] {
						creationRequest.PlaceholderForCreatedAsset
					});
				}
			}, (success, error) => {
				if (!success)
					Console.WriteLine (error.LocalizedDescription);
			});
		}
示例#17
0
        private VehicleImageContext GenerateMarkerImageWithText(string vehicleName)
        {
            NSString           markerText = new NSString(vehicleName);
            UIStringAttributes attributes = new UIStringAttributes {
                Font = UIFont.FromName("Arial", 16), ForegroundColor = UIColor.White
            };
            CGSize sizeOfMarkerText = markerText.GetSizeUsingAttributes(attributes);

            NSAttributedString markerString = new NSAttributedString(vehicleName, attributes);

            // Calculate element sizes depending on text and text attributes like font and font size
            float labelHeight  = (float)Math.Ceiling(sizeOfMarkerText.Height * 2.0);
            float labelWidth   = (float)Math.Ceiling(sizeOfMarkerText.Width);
            float labelEndSize = labelHeight;
            float gpsPointSize = 10.0f;
            float distanceBetweenLabelAndPoint = 10;

            CGSize imageSize = new CGSize(labelWidth + (labelEndSize), labelHeight + distanceBetweenLabelAndPoint + gpsPointSize);

            UIGraphicsImageRenderer renderer = new UIGraphicsImageRenderer(imageSize);
            UIImage image = renderer.CreateImage((context) =>
            {
                // Color Declarations
                UIColor blueZodiacColor = new UIColor(15.0f / 255f, 42.0f / 255f, 72.0f / 255f, 1.0f);

                // Draw label rectangle
                nfloat rectX               = labelEndSize / 2.0f;
                nfloat rectY               = 0;
                nfloat rectWidth           = labelWidth;
                nfloat rectHeight          = labelHeight;
                CGRect rectangleSize       = new CGRect(rectX, rectY, rectWidth, rectHeight);
                UIBezierPath rectanglePath = UIBezierPath.FromRect(rectangleSize);
                blueZodiacColor.SetFill();
                rectanglePath.Fill();

                // Draw text
                nfloat textX      = rectangleSize.Location.X;
                nfloat textY      = rectangleSize.Location.Y + (rectangleSize.Size.Height / 4.0f);
                nfloat textWidth  = labelWidth;
                nfloat textHeight = labelHeight;
                markerString.DrawString(new CGRect(textX, textY, textWidth, textHeight));

                // Draw label end left
                nfloat endLeftX             = 0;
                nfloat endLeftY             = 0;
                CGRect endcupLeftRect       = new CGRect(endLeftX, endLeftY, labelEndSize, labelEndSize);
                UIBezierPath endcupLeftPath = new UIBezierPath();
                endcupLeftPath.AddArc(new CGPoint(endcupLeftRect.GetMidX(), endcupLeftRect.GetMidY()), endcupLeftRect.Size.Width / 2, (nfloat)(90.0d * Math.PI / 180.0d), (nfloat)(-90.0d * Math.PI / 180.0d), true);
                endcupLeftPath.AddLineTo(new CGPoint(endcupLeftRect.GetMidX(), endcupLeftRect.GetMidY()));
                endcupLeftPath.ClosePath();

                blueZodiacColor.SetFill();
                endcupLeftPath.Fill();

                // Draw label end right
                nfloat endRightX             = rectangleSize.Size.Width;
                nfloat endRightY             = 0;
                CGRect endcupRightRect       = new CGRect(endRightX, endRightY, labelEndSize, labelEndSize);
                UIBezierPath endcupRightPath = new UIBezierPath();
                endcupRightPath.AddArc(new CGPoint(endcupRightRect.GetMidX(), endcupRightRect.GetMidY()), endcupRightRect.Size.Width / 2, (nfloat)(270d * Math.PI / 180d), (nfloat)(90d * Math.PI / 180d), true);
                endcupRightPath.AddLineTo(new CGPoint(endcupRightRect.GetMidX(), endcupRightRect.GetMidY()));
                endcupRightPath.ClosePath();

                blueZodiacColor.SetFill();
                endcupRightPath.Fill();

                // Draw GPS point
                nfloat pointX             = (nfloat)((imageSize.Width / 2.0) - (gpsPointSize / 2.0));
                nfloat pointY             = labelHeight + distanceBetweenLabelAndPoint;
                UIBezierPath gpsPointPath = UIBezierPath.FromOval(new CGRect(pointX, pointY, gpsPointSize, gpsPointSize));
                blueZodiacColor.SetFill();
                gpsPointPath.Fill();
            });

            // Create vehicle image context and set image
            VehicleImageContext vehicleImageContext = new VehicleImageContext();

            vehicleImageContext.image = image;
            // Calculate anchor offset to place the image correctly on the map
            vehicleImageContext.anchorOffset = new CGPoint(0.0, -((imageSize.Height / 2.0) - (gpsPointSize / 2.0)));

            return(vehicleImageContext);
        }
        UIImage CreateImageFromView(UIView briefView)
        {
            var renderer = new UIGraphicsImageRenderer(briefView.Bounds, format: UIGraphicsImageRendererFormat.DefaultFormat);

            return(renderer.CreateImage(arg => briefView.Layer.RenderInContext(arg.CGContext)));
        }