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()); }
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()}"); } }
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); } } }
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}"); } }
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}"); } }
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();
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); } } }