Exemple #1
0
        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);
        }
Exemple #2
0
    /// <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);
        }