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()); }
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); } }); }
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); }
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); }); } }
public static UIImage?ConvertToImage(this UIView view) { var imageRenderer = new UIGraphicsImageRenderer(view.Bounds.Size); return(imageRenderer.CreateImage((a) => { view.Layer.RenderInContext(a.CGContext); })); }
/// <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); }
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); }
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; } }
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); })); }
/// <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); }
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); }
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; }
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); }
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); }); }
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))); }