public async Task <byte[]> RenderAsync(RenderEncodingOptions encodingFormat = RenderEncodingOptions.Png) { var rtb = new RenderTargetBitmap(); await rtb.RenderAsync(Window.Current.Content); var pixelBuffer = await rtb.GetPixelsAsync(); var pixels = pixelBuffer.ToArray(); var displayInformation = DisplayInformation.GetForCurrentView(); var fileExtension = encodingFormat == RenderEncodingOptions.Png ? "png" : "jpg"; var file = await ApplicationData.Current.LocalFolder.CreateFileAsync($"temp.{fileExtension}", CreationCollisionOption.ReplaceExisting); using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite)) { var encoder = await BitmapEncoder.CreateAsync( encodingFormat == RenderEncodingOptions.Jpeg?BitmapEncoder.JpegEncoderId : BitmapEncoder.PngEncoderId, stream); encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, (uint)rtb.PixelWidth, (uint)rtb.PixelHeight, displayInformation.RawDpiX, displayInformation.RawDpiY, pixels); await encoder.FlushAsync(); } var buffer = await FileIO.ReadBufferAsync(file); return(buffer.ToArray()); }
public Task <byte[]> RenderAsync(RenderEncodingOptions encodingFormat = RenderEncodingOptions.Png) { return(Task.Run(() => { var capture = UIScreen.MainScreen.Capture(); if (encodingFormat == RenderEncodingOptions.Jpeg) { using (var nsData = capture.AsJPEG()) { var bytes = new byte[nsData.Length]; Marshal.Copy(nsData.Bytes, bytes, 0, Convert.ToInt32(nsData.Length)); return bytes; } } else { using (var nsData = capture.AsPNG()) { var bytes = new byte[nsData.Length]; Marshal.Copy(nsData.Bytes, bytes, 0, Convert.ToInt32(nsData.Length)); return bytes; } } })); }
public Task <byte[]> RenderAsync(int x, int y, int width, int height, RenderEncodingOptions encodingFormat = RenderEncodingOptions.Png) { return(Task.Run(() => { var rootView = CrossCurrentActivity.Current.Activity.Window.DecorView.RootView; // Generate the full screen bitmap using (var bitmap = Bitmap.CreateBitmap(rootView.Width, rootView.Height, Bitmap.Config.Argb8888)) { var canvas = new Canvas(bitmap); rootView.Draw(canvas); // Generate the cropped bitmap using the crop rect. using (var croppedBitmap = Bitmap.CreateBitmap(bitmap, x, y, width, height)) { var canvas2 = new Canvas(croppedBitmap); rootView.Draw(canvas2); using (var stream = new MemoryStream()) { croppedBitmap.Compress( encodingFormat == RenderEncodingOptions.Jpeg ? Bitmap.CompressFormat.Jpeg : Bitmap.CompressFormat.Png, 90, stream); return stream.ToArray(); } } } })); }
public Task <byte[]> RenderAsync(int x, int y, int width, int height, RenderEncodingOptions encodingFormat = RenderEncodingOptions.Png) { return(Task.Run(() => { var capture = UIScreen.MainScreen.Capture(); // Option 1 //UIGraphics.BeginImageContext(new SizeF(width, height)); //UIGraphics.GetCurrentContext().ClipToRect(new RectangleF(0, 0, width, height)); //capture.Draw(new RectangleF(-x, -y, width, height)); //var modifiedImage = UIGraphics.GetImageFromCurrentImageContext(); //UIGraphics.EndImageContext(); // Option 2 // NOTE: Might need to use -x and -y using (var cgImage = capture.CGImage.WithImageInRect(new RectangleF(x, y, width, height))) { var croppedImage = UIImage.FromImage(cgImage); if (encodingFormat == RenderEncodingOptions.Jpeg) { using (var nsData = croppedImage.AsJPEG()) { var bytes = new byte[nsData.Length]; Marshal.Copy(nsData.Bytes, bytes, 0, Convert.ToInt32(nsData.Length)); return bytes; } } else { using (var nsData = croppedImage.AsPNG()) { var bytes = new byte[nsData.Length]; Marshal.Copy(nsData.Bytes, bytes, 0, Convert.ToInt32(nsData.Length)); return bytes; } } } })); }
public async Task <byte[]> RenderAsync(int x, int y, int width, int height, RenderEncodingOptions encodingFormat = RenderEncodingOptions.Png) { var rtb = new RenderTargetBitmap(); await rtb.RenderAsync(Window.Current.Content); var pixelBuffer = await rtb.GetPixelsAsync(); var pixels = pixelBuffer.ToArray(); var displayInformation = DisplayInformation.GetForCurrentView(); var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("temp" + ".png", CreationCollisionOption.ReplaceExisting); using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite)) { var encoder = await BitmapEncoder.CreateAsync( encodingFormat == RenderEncodingOptions.Jpeg?BitmapEncoder.JpegEncoderId : BitmapEncoder.PngEncoderId, stream); encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied, (uint)rtb.PixelWidth, (uint)rtb.PixelHeight, displayInformation.RawDpiX, displayInformation.RawDpiY, pixels); // This does the cropping encoder.BitmapTransform.Bounds = new BitmapBounds { X = (uint)x, Y = (uint)y, Height = (uint)height, Width = (uint)width }; await encoder.FlushAsync(); } var buffer = await FileIO.ReadBufferAsync(file); return(buffer.ToArray()); }
public Task <byte[]> RenderRelativeAsync(int xProportion, int yProportion, int widthProportion, int heightProportion, RenderEncodingOptions encodingFormat = RenderEncodingOptions.Png) { return(Task.Run(() => { var capture = UIScreen.MainScreen.Capture(); var xTrue = capture.CGImage.Width * xProportion / 100; var yTrue = capture.CGImage.Height * yProportion / 100; var widthTrue = capture.CGImage.Width * widthProportion / 100; var heightTrue = capture.CGImage.Height * heightProportion / 100; using (var cgImage = capture.CGImage.WithImageInRect(new RectangleF(xTrue, yTrue, widthTrue, heightTrue))) { var croppedImage = UIImage.FromImage(cgImage); if (encodingFormat == RenderEncodingOptions.Jpeg) { using (var nsData = croppedImage.AsJPEG()) { var bytes = new byte[nsData.Length]; Marshal.Copy(nsData.Bytes, bytes, 0, Convert.ToInt32(nsData.Length)); return bytes; } } else { using (var nsData = croppedImage.AsPNG()) { var bytes = new byte[nsData.Length]; Marshal.Copy(nsData.Bytes, bytes, 0, Convert.ToInt32(nsData.Length)); return bytes; } } } })); }