public static async Task <Tuple <ImageSource, ImageSource> > GetImageAndBlurredCopyFromPixelDataAsync([NotNull] IBuffer buffer, int blur) { // Check if the input is valid if (buffer.Length == 0) { return(null); } // Apply the blur effect on a copy of the original image using (Stream imageStream = buffer.AsStream()) using (IRandomAccessStream randomImageStream = imageStream.AsRandomAccessStream()) { // Load the default image BitmapImage original = new BitmapImage(); await original.SetSourceAsync(randomImageStream); // Blur the copy of the image randomImageStream.Seek(0); using (RandomAccessStreamImageSource imageProvider = new RandomAccessStreamImageSource(randomImageStream)) using (BlurEffect blurEffect = new BlurEffect(imageProvider) { KernelSize = blur }) { // Process the blurred image WriteableBitmap blurred = new WriteableBitmap((int)original.PixelWidth, (int)original.PixelHeight); await blurEffect.GetBitmapAsync(blurred, OutputOption.Stretch); // Return the two images return(Tuple.Create <ImageSource, ImageSource>(original, blurred)); } } }
public static async Task <ImageSource> BlurImageAsync([NotNull] IBuffer buffer, int blur) { using (Stream imageStream = buffer.AsStream()) using (IRandomAccessStream randomImageStream = imageStream.AsRandomAccessStream()) { BitmapDecoder decoder; try { decoder = await BitmapDecoder.CreateAsync(randomImageStream); } catch { // Invalid image data return(null); } randomImageStream.Seek(0); using (RandomAccessStreamImageSource imageProvider = new RandomAccessStreamImageSource(randomImageStream)) using (BlurEffect blurEffect = new BlurEffect(imageProvider) { KernelSize = blur }) { WriteableBitmap blurred = new WriteableBitmap((int)decoder.PixelWidth, (int)decoder.PixelHeight); return(await blurEffect.GetBitmapAsync(blurred, OutputOption.Stretch)); } } }