public async Task <Photo> Read(PhotoLoadType loadType = PhotoLoadType.Miniature)
        {
            var dig = new OpenFileDialog()
            {
                //TODO: Multi language support
                Title = "Chose the image file"
            };

            var(path, stream) = await _reader.Read(dig);

            try
            {
                var imageBrush          = ReadImageBrushFromFile(stream, loadType);
                var metaDataDirectories = ImageMetadataReader.ReadMetadata(stream);
                var photo = new Photo
                {
                    ImageBrush          = imageBrush,
                    Attribute           = Attribute.NotProcessed,
                    Caption             = GetCaptionFromPath(path),
                    MetaDataDirectories = metaDataDirectories
                };
                return(photo);
            }
            catch (Exception e)
            {
                throw new Exception($"unable to read image from {path}");
            }
        }
        public async Task <Photo[]> ReadAllFromDir(PhotoLoadType loadType = PhotoLoadType.Miniature, bool isRecursive = false)
        {
            var dig = new OpenFileDialog()
            {
                //TODO: Multi language support
                Title = "Chose directory image files"
            };
            var multipleFiles = await _reader.ReadAllFromDir(dig, isRecursive);

            var photoList = new List <Photo>();

            foreach (var(path, stream) in multipleFiles)
            {
                try
                {
                    var imageBrush          = ReadImageBrushFromFile(stream, loadType);
                    var metaDataDirectories = ImageMetadataReader.ReadMetadata(stream);
                    var photo = new Photo
                    {
                        ImageBrush          = imageBrush,
                        Attribute           = Attribute.NotProcessed,
                        Caption             = GetCaptionFromPath(path),
                        MetaDataDirectories = metaDataDirectories
                    };
                    photoList.Add(photo);
                }
                catch (Exception e)
                {
                    throw new Exception($"unable to read image from {path}");
                }
            }
            return(photoList.ToArray());
        }
Пример #3
0
        public async Task <Photo[]> ReadAllFromDir(PhotoLoadType loadType = PhotoLoadType.Miniature, bool isRecursive = false)
        {
            var dig = new OpenFolderDialog()
            {
                //TODO: Multi language support
                Title = "Chose directory image files"
            };
            var multipleFiles = await _reader.ReadAllFromDir(dig, isRecursive);

            var photoList = new List <Photo>();

            foreach (var(path, stream) in multipleFiles)
            {
                try
                {
                    var imageBrush          = ReadImageBrushFromFile(stream, loadType);
                    var metaDataDirectories = ImageMetadataReader.ReadMetadata(path);
                    var photo = new Photo
                    {
                        ImageBrush          = imageBrush,
                        Attribute           = Attribute.NotProcessed,
                        MetaDataDirectories = metaDataDirectories
                    };
                    photoList.Add(photo);
                }
                catch (Exception e)
                {
                    //TODO: translate to rus
                    Console.WriteLine($"ERROR: image from {path} is skipped!\nDetails: {e}");
                }
            }
            return(photoList.ToArray());
        }
        private static ImageBrush ReadImageBrushFromFile(Stream stream, PhotoLoadType loadType)
        {
            switch (loadType)
            {
            case PhotoLoadType.Miniature:
                using (var src = SKBitmap.Decode(stream))
                {
                    var scale   = 100f / src.Width;
                    var resized = new SKBitmap(
                        (int)(src.Width * scale),
                        (int)(src.Height * scale),
                        src.ColorType,
                        src.AlphaType);
                    src.ScalePixels(resized, SKFilterQuality.Low);
                    var bitmap = new Bitmap(
                        resized.ColorType.ToPixelFormat(),
                        resized.GetPixels(),
                        new PixelSize(resized.Width, resized.Height),
                        SkiaPlatform.DefaultDpi,
                        resized.RowBytes);
                    return(new ImageBrush(bitmap));
                }
                break;

            case PhotoLoadType.Full:
                return(new ImageBrush(new Bitmap(stream)));

                break;

            default:
                throw new Exception($"invalid ImageLoadMode:{loadType.ToString()}");
            }
        }
Пример #5
0
        public Photo Load(string source, PhotoLoadType loadType)
        {
            var loader = new FileLoader();

            using (var stream = loader.Load(source))
            {
                try
                {
                    var imageBrush          = ReadImageBrushFromFile(stream, loadType);
                    var metaDataDirectories = ImageMetadataReader.ReadMetadata(stream);
                    var photo = new Photo
                    {
                        ImageBrush          = imageBrush,
                        Attribute           = Attribute.NotProcessed,
                        Caption             = GetCaptionFromPath(source),
                        MetaDataDirectories = metaDataDirectories
                    };
                    return(photo);
                }
                catch (Exception e)
                {
                    throw new Exception($"unable to load image from {source}", e);
                }
            }
        }
Пример #6
0
        public async Task <PhotoViewModel> ReadByAnnotation(int id, PhotoLoadType loadType = PhotoLoadType.Miniature)
        {
            var dig = new OpenFileDialog()
            {
                //TODO: Multi language support
                Title = "Chose the annotation file"
            };
            var photoLoader      = new PhotoLoader();
            var annotationLoader = new AnnotationLoader();

            var(path, stream) = await _reader.Read(dig);

            try
            {
                var annotation = annotationLoader.Load(path, stream);
                var photoPath  = Path.Combine(annotation.Folder, annotation.Filename);
                var photo      = await photoLoader.Load(photoPath, loadType);

                return(new PhotoViewModel(id, photo, annotation));
            }
            catch (Exception e)
            {
                throw new Exception($"unable to read image from {path}");
            }
        }
Пример #7
0
        public async Task <PhotoViewModel> ReadByPhoto(int id, PhotoLoadType loadType = PhotoLoadType.Miniature)
        {
            var dig = new OpenFileDialog()
            {
                //TODO: Multi language support
                Title = "Chose the image file"
            };
            var photoLoader = new PhotoLoader();

            var(path, stream) = await _reader.Read(dig);

            try
            {
                var photo = await photoLoader.Load(path, stream, loadType);

                var annotation = new Annotation
                {
                    Filename = Path.GetFileName(path),
                    Folder   = Path.GetDirectoryName(path)
                };
                return(new PhotoViewModel(id, photo, annotation));
            }
            catch (Exception e)
            {
                throw new Exception($"unable to read image from {path}");
            }
        }
Пример #8
0
        public async Task <PhotoViewModel[]> ReadAllFromDirByPhoto(PhotoLoadType loadType = PhotoLoadType.Miniature, bool isRecursive = false)
        {
            var dig = new OpenFolderDialog()
            {
                //TODO: Multi language support
                Title = "Chose directory image files"
            };
            var multipleFiles = await _reader.ReadAllFromDir(dig, isRecursive);

            var photoLoader = new PhotoLoader();
            var photoList   = new List <PhotoViewModel>();
            var count       = 0;
            var id          = 0;
            var valueTuples = multipleFiles as (string Path, Stream Stream)[] ?? multipleFiles.ToArray();
Пример #9
0
        public async Task <Photo> Load(string source, Stream stream, PhotoLoadType loadType)
        {
            using (stream)
            {
                try
                {
                    var imageBrush = await Task <ImageBrush> .Factory.StartNew(() => ReadImageBrushFromFile(stream, loadType).Result);

                    var metaDataDirectories = ImageMetadataReader.ReadMetadata(source);
                    var photo = new Photo
                    {
                        ImageBrush          = imageBrush,
                        Attribute           = Attribute.NotProcessed,
                        MetaDataDirectories = metaDataDirectories
                    };
                    return(photo);
                }
                catch (Exception e)
                {
                    throw new Exception($"unable to load image from {source}", e);
                }
            }
        }