/////////////////////////////////////////////////////////////////////////// // Use the Nokia Imaging SDK to apply a filter to a selected image private async void AppBarBtnEdit_Click(object sender, RoutedEventArgs e) { progressRing.IsEnabled = true; progressRing.IsActive = true; progressRing.Visibility = Visibility.Visible; // Create NOK Imaging SDK effects pipeline and run it var imageStream = new BitmapImageSource(originalBitmap.AsBitmap()); using (var effect = new FilterEffect(imageStream)) { var filter = new Lumia.Imaging.Adjustments.GrayscaleFilter(); effect.Filters = new[] { filter }; // Render the image to a WriteableBitmap. var renderer = new WriteableBitmapRenderer(effect, originalBitmap); editedBitmap = await renderer.RenderAsync(); editedBitmap.Invalidate(); } Image.Source = originalBitmap; Image.Visibility = Visibility.Collapsed; //Resizing the editedBitmap to 128x128 var resized1 = editedBitmap.Resize(128, 128, Windows.UI.Xaml.Media.Imaging.WriteableBitmapExtensions.Interpolation.Bilinear); //converting the editedBitmap to byte array byte[] edit_arr = resized1.ToByteArray(); //obtaining the images folder StorageFolder folder = Windows.ApplicationModel.Package.Current.InstalledLocation; StorageFolder subfolder = await folder.GetFolderAsync("Images"); //create list of all the files in the images folder var pictures = await subfolder.GetFilesAsync(); double ldiff = 50;//least percentage difference for an image to be a match string dispText = "Try again";//default message to be displayed byte threshold = 124; //process through all images foreach (var file in pictures) { if (file != null) { // Use WriteableBitmapEx to easily load image from a stream using (var stream = await file.OpenReadAsync()) { listBitmap = await new WriteableBitmap(1, 1).FromStream(stream); stream.Dispose(); } //convert obtained image to byte array byte[] list_arr = listBitmap.ToByteArray(); byte[] difference = new byte[edit_arr.Length]; //compare byte array of both the images for (int i=0;i<list_arr.Length;i++) { difference[i] = (byte)Math.Abs(edit_arr[i]-list_arr[i]); } //calculate percentage difference int differentPixels = 0; foreach(byte b in difference ) { if (b > threshold) differentPixels++; } double percentage = (double)differentPixels / (double)list_arr.Length; percentage = percentage * 100; if (percentage <= ldiff) { ldiff = percentage; dispText =file.DisplayName; } } } tb.Text = dispText; progressRing.IsEnabled = false; progressRing.IsActive = false; progressRing.Visibility = Visibility.Collapsed; tb.Visibility = Visibility.Visible; Image.Visibility = Visibility.Visible; var tmp = new RenderTargetBitmap(); await tmp.RenderAsync(source); var buffer = await tmp.GetPixelsAsync(); var width = tmp.PixelWidth; var height = tmp.PixelHeight; editedBitmap = await new WriteableBitmap(1, 1).FromPixelBuffer(buffer, width, height); AppBarBtnSpeech.IsEnabled = true; AppBarBtnSpeech.Visibility = Visibility.Visible; AppBarBtnSave.IsEnabled = true; }