public static ImageSource GetImage(string path, Assembly assembly) { string packString; ImageSourceConverter converter = new ImageSourceConverter(); // first look in provided assembly if (assembly != null) { packString = string.Format( "pack://application:,,,/{0};component/{1}" , assembly.GetName().Name , path ); //todo: this throws a null reference, need to find a way to see if path is valid without exception if (converter.IsValid(packString)) { return((ImageSource)converter.ConvertFromString(packString)); } } // now look in calling assembly packString = string.Format( "pack://application:,,,/{0};component/{1}" , Assembly.GetCallingAssembly().GetName().Name , path ); //todo: this throws a null reference, need to find a way to see if path is valid without exception if (converter.IsValid(packString)) { return((ImageSource)converter.ConvertFromString(packString)); } // now look in this assembly packString = string.Format( "pack://application:,,,/{0};component/{1}" , Assembly.GetExecutingAssembly().GetName().Name , path ); if (converter.IsValid(packString)) { return((ImageSource)converter.ConvertFromString(packString)); } // give up ¯\_(ツ)_/¯ return(null); }
/// <summary> /// Set image of interest with Drag & Drop /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ImageDrop(object sender, DragEventArgs e) { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); if (files.Length < 1) { return; } ImageSourceConverter converter = new ImageSourceConverter(); var dropped_file = files[0]; if (Path.GetExtension(dropped_file).Equals(".ico")) { return; } if (converter.IsValid(dropped_file)) { image_of_interest = dropped_file; var dropped_image_folder = Path.GetDirectoryName(dropped_file); if (this.SearchFolder.Text.Equals(String.Empty)) { this.SearchFolder.Text = dropped_image_folder; } UpdateImage(dropped_file); } }
private void GetLoadImages(string[] files) { if (files == null) { return; } ImageSourceConverter converter = new ImageSourceConverter(); List <string> correctFiles = new List <string>(); for (int i = 0; i < files.Count(); i++) { if (converter.IsValid(files[i])) { correctFiles.Add(files[i]); } } if (correctFiles.Count < 0) { return; } List <Image <Bgr, Byte> > findImages = new List <Image <Bgr, byte> >(); foreach (string file in correctFiles) { findImages.Add(new Image <Bgr, byte>(file)); } if (findImages.Count < 0) { return; } selectedImages = new List <Image <Bgr, byte> >(findImages); currentPreviewImage = 0; SetImagePreview(currentPreviewImage); }
//Есть небольшие утечки памяти private void GetLoadFaces(string[] files) { if (lockLoadFaces) { return; } lockLoadFaces = true; TaskItem taskItem = null; taskItem = new TaskItem("Получение лиц с фотографий", false, () => { if (files == null) { return; } ImageSourceConverter converter = new ImageSourceConverter(); List <string> correctFiles = new List <string>(); for (int i = 0; i < files.Count(); i++) { if (converter.IsValid(files[i])) { correctFiles.Add(files[i]); } } if (correctFiles.Count < 0) { return; } List <Image <Bgr, Byte> > findImages = new List <Image <Bgr, byte> >(); foreach (string file in correctFiles) { findImages.Add(new Image <Bgr, byte>(file)); } if (findImages.Count < 0) { return; } List <Image <Bgr, Byte> > findFaces = new List <Image <Bgr, byte> >(); foreach (var img in findImages) { using (UMat ugray = new UMat()) { CvInvoke.CvtColor(img, ugray, ColorConversion.Bgr2Gray); CvInvoke.EqualizeHist(ugray, ugray); var rects = HaarCascade.DetectMultiScale(ugray, 1.1, 10, new System.Drawing.Size(20, 20)); foreach (var rect in rects) { findFaces.Add(img.Copy(rect)); } } } if (findFaces.Count < 0) { return; } selectedFaces = new List <Image <Bgr, byte> >(findFaces); Dispatcher.Invoke(() => { SelectedFaceCount.Content = "Всего выбрано: " + selectedFaces.Count(); }); currentFace = 0; SetImageFace(currentFace); Dispatcher.Invoke(() => { taskItem.Remove(); }); lockLoadFaces = false; }); TaskList.Items.Add(taskItem); }