From c1f946df5f94697be687c5e705ff4ceb5af17fd7 Mon Sep 17 00:00:00 2001 From: Ben Olden-Cooligan Date: Mon, 10 Oct 2022 18:25:59 -0700 Subject: [PATCH] WIP: JPEG200 support, just on Mac for now --- NAPS2.Images.Gdi/GdiImage.cs | 5 +- NAPS2.Images.Gdi/GdiImageContext.cs | 2 + NAPS2.Images.Gtk/GtkImage.cs | 5 +- NAPS2.Images.Gtk/GtkImageContext.cs | 2 + NAPS2.Images.Mac/MacImage.cs | 8 +- NAPS2.Images.Mac/MacImageContext.cs | 3 + NAPS2.Images/ImageFileFormat.cs | 1 + NAPS2.Images/Storage/ImageContext.cs | 36 +- .../WinForms/DesktopControllerTests.cs | 3 + .../WinForms/FAutoSaveSettings.cs | 4 +- NAPS2.Lib.WinForms/WinForms/FBatchScan.cs | 4 +- NAPS2.Lib.WinForms/WinForms/FImageSettings.cs | 4 +- NAPS2.Lib.WinForms/WinForms/FPdfSettings.cs | 4 +- NAPS2.Lib/EtoForms/FileFilterGroup.cs | 10 + NAPS2.Lib/EtoForms/FileFilters.cs | 56 + NAPS2.Lib/ImportExport/AutoSaver.cs | 4 +- .../Images/SaveImagesOperation.cs | 58 +- .../Lang/Resources/MiscResources.Designer.cs | 1612 +++++++---------- NAPS2.Lib/Lang/Resources/MiscResources.resx | 3 + NAPS2.Lib/Paths.cs | 1 + NAPS2.Lib/WinForms/DesktopController.cs | 33 +- NAPS2.Lib/WinForms/DialogHelper.cs | 8 +- NAPS2.Lib/WinForms/StubDialogHelper.cs | 12 +- NAPS2.Lib/WinForms/WinFormsDialogHelper.cs | 90 +- NAPS2.Lib/WinForms/WinFormsExportHelper.cs | 4 +- NAPS2.Lib/WinForms/WinFormsOverwritePrompt.cs | 5 +- NAPS2.Sdk.Tests/ImageResources.Designer.cs | 564 +++--- NAPS2.Sdk.Tests/ImageResources.resx | 3 + NAPS2.Sdk.Tests/Images/LoadSaveTests.cs | 5 + NAPS2.Sdk.Tests/Resources/dog.jp2 | Bin 0 -> 131707 bytes NAPS2.Sdk/Images/ProcessedImage.cs | 1 + 31 files changed, 1027 insertions(+), 1523 deletions(-) create mode 100644 NAPS2.Lib/EtoForms/FileFilterGroup.cs create mode 100644 NAPS2.Lib/EtoForms/FileFilters.cs create mode 100644 NAPS2.Sdk.Tests/Resources/dog.jp2 diff --git a/NAPS2.Images.Gdi/GdiImage.cs b/NAPS2.Images.Gdi/GdiImage.cs index d4d0797b4..f997d4faf 100644 --- a/NAPS2.Images.Gdi/GdiImage.cs +++ b/NAPS2.Images.Gdi/GdiImage.cs @@ -14,7 +14,8 @@ public class GdiImage : IMemoryImage { public GdiImage(ImageContext imageContext, Bitmap bitmap) { - ImageContext = imageContext ?? throw new ArgumentNullException(nameof(imageContext)); + if (imageContext is not GdiImageContext) throw new ArgumentException(); + ImageContext = imageContext; if (bitmap == null) { throw new ArgumentNullException(nameof(bitmap)); @@ -62,6 +63,7 @@ public class GdiImage : IMemoryImage { imageFormat = ImageContext.GetFileFormatFromExtension(path); } + ImageContext.CheckSupportsFormat(imageFormat); if (imageFormat == ImageFileFormat.Jpeg && quality != -1) { var (encoder, encoderParams) = GetJpegSaveArgs(quality); @@ -79,6 +81,7 @@ public class GdiImage : IMemoryImage { throw new ArgumentException("Format required to save to a stream", nameof(imageFormat)); } + ImageContext.CheckSupportsFormat(imageFormat); if (imageFormat == ImageFileFormat.Jpeg && quality != -1) { var (encoder, encoderParams) = GetJpegSaveArgs(quality); diff --git a/NAPS2.Images.Gdi/GdiImageContext.cs b/NAPS2.Images.Gdi/GdiImageContext.cs index bfc24c4a6..066b0d855 100644 --- a/NAPS2.Images.Gdi/GdiImageContext.cs +++ b/NAPS2.Images.Gdi/GdiImageContext.cs @@ -20,6 +20,8 @@ public class GdiImageContext : ImageContext _imageTransformer = new GdiImageTransformer(this); } + protected override bool SupportsTiff => true; + public override IMemoryImage PerformTransform(IMemoryImage image, Transform transform) { var gdiImage = image as GdiImage ?? throw new ArgumentException("Expected GdiImage object"); diff --git a/NAPS2.Images.Gtk/GtkImage.cs b/NAPS2.Images.Gtk/GtkImage.cs index d0aabed6e..61c2170b4 100644 --- a/NAPS2.Images.Gtk/GtkImage.cs +++ b/NAPS2.Images.Gtk/GtkImage.cs @@ -8,7 +8,8 @@ public class GtkImage : IMemoryImage { public GtkImage(ImageContext imageContext, Pixbuf pixbuf) { - ImageContext = imageContext ?? throw new ArgumentNullException(nameof(imageContext)); + if (imageContext is not GtkImageContext) throw new ArgumentException(); + ImageContext = imageContext; Pixbuf = pixbuf; LogicalPixelFormat = PixelFormat; HorizontalResolution = float.TryParse(pixbuf.GetOption("x-dpi"), out var xDpi) ? xDpi : 0; @@ -72,6 +73,7 @@ public class GtkImage : IMemoryImage { imageFormat = ImageContext.GetFileFormatFromExtension(path); } + ImageContext.CheckSupportsFormat(imageFormat); var type = GetType(imageFormat); var (keys, values) = GetSaveOptions(imageFormat, quality); Pixbuf.Savev(path, type, keys, values); @@ -83,6 +85,7 @@ public class GtkImage : IMemoryImage { throw new ArgumentException("Format required to save to a stream", nameof(imageFormat)); } + ImageContext.CheckSupportsFormat(imageFormat); var type = GetType(imageFormat); var (keys, values) = GetSaveOptions(imageFormat, quality); // TODO: Map to OutputStream directly? diff --git a/NAPS2.Images.Gtk/GtkImageContext.cs b/NAPS2.Images.Gtk/GtkImageContext.cs index 8cf155bb4..e6dbba848 100644 --- a/NAPS2.Images.Gtk/GtkImageContext.cs +++ b/NAPS2.Images.Gtk/GtkImageContext.cs @@ -14,6 +14,8 @@ public class GtkImageContext : ImageContext _tiffIo = new LibTiffIo(this); } + protected override bool SupportsTiff => true; + public override IMemoryImage PerformTransform(IMemoryImage image, Transform transform) { var gdiImage = image as GtkImage ?? throw new ArgumentException("Expected GtkImage object"); diff --git a/NAPS2.Images.Mac/MacImage.cs b/NAPS2.Images.Mac/MacImage.cs index 9e3d3842e..fc1ccd0c9 100644 --- a/NAPS2.Images.Mac/MacImage.cs +++ b/NAPS2.Images.Mac/MacImage.cs @@ -7,7 +7,8 @@ public class MacImage : IMemoryImage { public MacImage(ImageContext imageContext, NSImage image) { - ImageContext = imageContext ?? throw new ArgumentNullException(nameof(imageContext)); + if (imageContext is not MacImageContext) throw new ArgumentException(); + ImageContext = imageContext; NsImage = image ?? throw new ArgumentNullException(nameof(image)); var reps = NsImage.Representations(); if (reps.Length != 1) @@ -124,6 +125,7 @@ public class MacImage : IMemoryImage { imageFormat = ImageContext.GetFileFormatFromExtension(path); } + ImageContext.CheckSupportsFormat(imageFormat); var rep = GetRepForSaving(imageFormat, quality); if (!rep.Save(path, false, out var error)) { @@ -137,6 +139,7 @@ public class MacImage : IMemoryImage { throw new ArgumentException("Format required to save to a stream", nameof(imageFormat)); } + ImageContext.CheckSupportsFormat(imageFormat); var rep = GetRepForSaving(imageFormat, quality); rep.AsStream().CopyTo(stream); } @@ -145,7 +148,7 @@ public class MacImage : IMemoryImage { lock (MacImageContext.ConstructorLock) { - var props = quality != -1 && imageFormat == ImageFileFormat.Jpeg + var props = quality != -1 && imageFormat is ImageFileFormat.Jpeg or ImageFileFormat.Jpeg2000 ? NSDictionary.FromObjectAndKey(NSNumber.FromDouble(quality / 100.0), NSBitmapImageRep.CompressionFactor) : null; @@ -155,6 +158,7 @@ public class MacImage : IMemoryImage ImageFileFormat.Png => NSBitmapImageFileType.Png, ImageFileFormat.Bmp => NSBitmapImageFileType.Bmp, ImageFileFormat.Tiff => NSBitmapImageFileType.Tiff, + ImageFileFormat.Jpeg2000 => NSBitmapImageFileType.Jpeg2000, _ => throw new InvalidOperationException("Unsupported image format") }; var targetFormat = LogicalPixelFormat; diff --git a/NAPS2.Images.Mac/MacImageContext.cs b/NAPS2.Images.Mac/MacImageContext.cs index 5e8d897a9..2d9190adf 100644 --- a/NAPS2.Images.Mac/MacImageContext.cs +++ b/NAPS2.Images.Mac/MacImageContext.cs @@ -16,6 +16,9 @@ public class MacImageContext : ImageContext _imageTransformer = new MacImageTransformer(this); } + protected override bool SupportsTiff => true; + protected override bool SupportsJpeg2000 => true; + public override IMemoryImage PerformTransform(IMemoryImage image, Transform transform) { var macImage = image as MacImage ?? throw new ArgumentException("Expected MacImage object"); diff --git a/NAPS2.Images/ImageFileFormat.cs b/NAPS2.Images/ImageFileFormat.cs index cb514c647..996f291f2 100644 --- a/NAPS2.Images/ImageFileFormat.cs +++ b/NAPS2.Images/ImageFileFormat.cs @@ -5,6 +5,7 @@ public enum ImageFileFormat Unspecified, Bmp, Jpeg, + Jpeg2000, Png, Tiff } diff --git a/NAPS2.Images/Storage/ImageContext.cs b/NAPS2.Images/Storage/ImageContext.cs index 44e5b609c..430058731 100644 --- a/NAPS2.Images/Storage/ImageContext.cs +++ b/NAPS2.Images/Storage/ImageContext.cs @@ -16,6 +16,7 @@ public abstract class ImageContext ".bmp" => ImageFileFormat.Bmp, ".jpg" or ".jpeg" => ImageFileFormat.Jpeg, ".tif" or ".tiff" => ImageFileFormat.Tiff, + ".jp2" or ".jpx" => ImageFileFormat.Jpeg2000, _ => throw new ArgumentException($"Could not infer file format from extension: {path}") }; } @@ -26,9 +27,9 @@ public abstract class ImageContext { return ImageFileFormat.Unspecified; } - var firstBytes = new byte[4]; + var firstBytes = new byte[8]; stream.Seek(0, SeekOrigin.Begin); - stream.Read(firstBytes, 0, 4); + stream.Read(firstBytes, 0, 8); stream.Seek(0, SeekOrigin.Begin); if (firstBytes[0] == 0x89 && firstBytes[1] == 0x50 && firstBytes[2] == 0x4E && firstBytes[3] == 0x47) { @@ -50,6 +51,10 @@ public abstract class ImageContext { return ImageFileFormat.Tiff; } + if (firstBytes[4] == 0x6A && firstBytes[5] == 0x50 && firstBytes[6] == 0x20 && firstBytes[7] == 0x20) + { + return ImageFileFormat.Jpeg2000; + } return ImageFileFormat.Unspecified; } @@ -122,6 +127,13 @@ public abstract class ImageContext public Type ImageType { get; } + public bool SupportsFormat(ImageFileFormat format) => + format is ImageFileFormat.Bmp or ImageFileFormat.Jpeg or ImageFileFormat.Png || + format == ImageFileFormat.Tiff && SupportsTiff || format == ImageFileFormat.Jpeg2000 && SupportsJpeg2000; + + protected virtual bool SupportsTiff => false; + protected virtual bool SupportsJpeg2000 => false; + // TODO: Implement these 4 load methods here, calling protected abstract internal methods. // TODO: That will let us implement common behavior (reading file formats, setting originalfileformat/logicalpixelformat) consistently. /// @@ -143,6 +155,7 @@ public abstract class ImageContext public IMemoryImage Load(Stream stream) { var format = GetFileFormatFromFirstBytes(stream); + CheckSupportsFormat(format); var image = LoadCore(stream, format); if (image.OriginalFileFormat == ImageFileFormat.Unspecified) { @@ -189,6 +202,15 @@ public abstract class ImageContext private IAsyncEnumerable DoLoadFrames(Stream stream, ImageFileFormat format, ProgressHandler progress, bool disposeStream) { + try + { + CheckSupportsFormat(format); + } + catch (Exception) + { + if (disposeStream) stream.Dispose(); + throw; + } return AsyncProducers.RunProducer(produceImage => { try @@ -222,7 +244,15 @@ public abstract class ImageContext } } - public abstract ITiffWriter TiffWriter { get; } + public void CheckSupportsFormat(ImageFileFormat format) + { + if (!SupportsFormat(format)) + { + throw new NotSupportedException($"Unsupported file format: {format}"); + } + } + + public virtual ITiffWriter TiffWriter => throw new NotSupportedException(); public IMemoryImage Render(IRenderableImage image) { diff --git a/NAPS2.Lib.Tests/WinForms/DesktopControllerTests.cs b/NAPS2.Lib.Tests/WinForms/DesktopControllerTests.cs index 46e08a6ca..1a0b9c352 100644 --- a/NAPS2.Lib.Tests/WinForms/DesktopControllerTests.cs +++ b/NAPS2.Lib.Tests/WinForms/DesktopControllerTests.cs @@ -29,6 +29,7 @@ public class DesktopControllerTests : ContextualTests private readonly ImageTransfer _imageTransfer; private readonly ImageClipboard _imageClipboard; private readonly Mock _exportHelper; + private readonly Mock _dialogHelper; private readonly DesktopImagesController _desktopImagesController; private readonly Mock _desktopScanController; private readonly DesktopFormProvider _desktopFormProvider; @@ -51,6 +52,7 @@ public class DesktopControllerTests : ContextualTests _imageTransfer = new ImageTransfer(); _imageClipboard = new ImageClipboard(); _exportHelper = new Mock(); + _dialogHelper = new Mock(); _desktopImagesController = new DesktopImagesController(_imageList); _desktopScanController = new Mock(); _desktopFormProvider = new DesktopFormProvider(); @@ -72,6 +74,7 @@ public class DesktopControllerTests : ContextualTests new ImageListActions(_imageList, _operationFactory.Object, _operationProgress.Object, _config, _thumbnailController), _exportHelper.Object, + _dialogHelper.Object, _desktopImagesController, _desktopScanController.Object, _desktopFormProvider, diff --git a/NAPS2.Lib.WinForms/WinForms/FAutoSaveSettings.cs b/NAPS2.Lib.WinForms/WinForms/FAutoSaveSettings.cs index 734b98f28..29323ef48 100644 --- a/NAPS2.Lib.WinForms/WinForms/FAutoSaveSettings.cs +++ b/NAPS2.Lib.WinForms/WinForms/FAutoSaveSettings.cs @@ -82,9 +82,9 @@ public partial class FAutoSaveSettings : FormBase private void btnChooseFolder_Click(object sender, EventArgs e) { - if (_dialogHelper.PromptToSavePdfOrImage(null, out string savePath)) + if (_dialogHelper.PromptToSavePdfOrImage(null, out string? savePath)) { - txtFilePath.Text = savePath; + txtFilePath.Text = savePath!; } } diff --git a/NAPS2.Lib.WinForms/WinForms/FBatchScan.cs b/NAPS2.Lib.WinForms/WinForms/FBatchScan.cs index dc07f5afd..15043cf4b 100644 --- a/NAPS2.Lib.WinForms/WinForms/FBatchScan.cs +++ b/NAPS2.Lib.WinForms/WinForms/FBatchScan.cs @@ -183,9 +183,9 @@ public partial class FBatchScan : FormBase private void btnChooseFolder_Click(object sender, EventArgs e) { - if (_dialogHelper.PromptToSavePdfOrImage(null, out string savePath)) + if (_dialogHelper.PromptToSavePdfOrImage(null, out string? savePath)) { - txtFilePath.Text = savePath; + txtFilePath.Text = savePath!; } } diff --git a/NAPS2.Lib.WinForms/WinForms/FImageSettings.cs b/NAPS2.Lib.WinForms/WinForms/FImageSettings.cs index 93858f927..170aff9de 100644 --- a/NAPS2.Lib.WinForms/WinForms/FImageSettings.cs +++ b/NAPS2.Lib.WinForms/WinForms/FImageSettings.cs @@ -121,9 +121,9 @@ public partial class FImageSettings : FormBase private void btnChooseFolder_Click(object sender, EventArgs e) { - if (_dialogHelper.PromptToSaveImage(txtDefaultFilePath.Text, out string savePath)) + if (_dialogHelper.PromptToSaveImage(txtDefaultFilePath.Text, out string? savePath)) { - txtDefaultFilePath.Text = savePath; + txtDefaultFilePath.Text = savePath!; } } } \ No newline at end of file diff --git a/NAPS2.Lib.WinForms/WinForms/FPdfSettings.cs b/NAPS2.Lib.WinForms/WinForms/FPdfSettings.cs index b6111ec24..d3adff63b 100644 --- a/NAPS2.Lib.WinForms/WinForms/FPdfSettings.cs +++ b/NAPS2.Lib.WinForms/WinForms/FPdfSettings.cs @@ -165,9 +165,9 @@ public partial class FPdfSettings : FormBase private void btnChooseFolder_Click(object sender, EventArgs e) { - if (_dialogHelper.PromptToSavePdf(txtDefaultFilePath.Text, out string savePath)) + if (_dialogHelper.PromptToSavePdf(txtDefaultFilePath.Text, out string? savePath)) { - txtDefaultFilePath.Text = savePath; + txtDefaultFilePath.Text = savePath!; } } } \ No newline at end of file diff --git a/NAPS2.Lib/EtoForms/FileFilterGroup.cs b/NAPS2.Lib/EtoForms/FileFilterGroup.cs new file mode 100644 index 000000000..47596da6e --- /dev/null +++ b/NAPS2.Lib/EtoForms/FileFilterGroup.cs @@ -0,0 +1,10 @@ +namespace NAPS2.EtoForms; + +[Flags] +public enum FileFilterGroup +{ + Pdf = 1, + Image = 2, + AllFiles = 4, + AllImages = 8 +} \ No newline at end of file diff --git a/NAPS2.Lib/EtoForms/FileFilters.cs b/NAPS2.Lib/EtoForms/FileFilters.cs new file mode 100644 index 000000000..b706ef014 --- /dev/null +++ b/NAPS2.Lib/EtoForms/FileFilters.cs @@ -0,0 +1,56 @@ +using Eto.Forms; + +namespace NAPS2.EtoForms; + +public class FileFilters +{ + private readonly ImageContext _imageContext; + + public FileFilters(ImageContext imageContext) + { + _imageContext = imageContext; + } + + public void Set(FileDialog fileDialog, FileFilterGroup groups, string? selectedExt = null) + { + var filters = fileDialog.Filters; + if (groups.HasFlag(FileFilterGroup.AllFiles)) + { + filters.Add(new FileFilter(MiscResources.FileTypeAllFiles, ".*")); + } + if (groups.HasFlag(FileFilterGroup.Pdf)) + { + filters.Add(new FileFilter(MiscResources.FileTypePdf, ".pdf")); + } + if (groups.HasFlag(FileFilterGroup.AllImages)) + { + filters.Add(new FileFilter(MiscResources.FileTypeImageFiles, + ".bmp", ".emf", ".exif", ".gif", "jpg", ".jpeg", ".png", ".tiff", ".tif")); + } + if (groups.HasFlag(FileFilterGroup.Image)) + { + filters.Add(new FileFilter(MiscResources.FileTypeBmp, ".bmp")); + filters.Add(new FileFilter(MiscResources.FileTypeEmf, ".emf")); + filters.Add(new FileFilter(MiscResources.FileTypeExif, ".exif")); + filters.Add(new FileFilter(MiscResources.FileTypeGif, ".gif")); + filters.Add(new FileFilter(MiscResources.FileTypeJpeg, ".jpg", ".jpeg")); + if (_imageContext.SupportsFormat(ImageFileFormat.Jpeg2000)) + { + filters.Add(new FileFilter(MiscResources.FileTypeJp2, ".jp2", ".jpx")); + } + filters.Add(new FileFilter(MiscResources.FileTypePng, ".png")); + filters.Add(new FileFilter(MiscResources.FileTypeTiff, ".tiff", ".tif")); + } + if (selectedExt != null) + { + selectedExt = selectedExt.Replace(".", ""); + foreach (var filter in filters) + { + if (filter.Extensions.Any(x => x.Replace(".", "") == selectedExt)) + { + fileDialog.CurrentFilter = filter; + } + } + } + } +} \ No newline at end of file diff --git a/NAPS2.Lib/ImportExport/AutoSaver.cs b/NAPS2.Lib/ImportExport/AutoSaver.cs index 2afb3c1f8..34e0c52a8 100644 --- a/NAPS2.Lib/ImportExport/AutoSaver.cs +++ b/NAPS2.Lib/ImportExport/AutoSaver.cs @@ -111,9 +111,9 @@ public class AutoSaver string subPath = placeholders.Substitute(settings.FilePath, true, i); if (settings.PromptForFilePath) { - if (_dialogHelper.PromptToSavePdfOrImage(subPath, out string newPath)) + if (_dialogHelper.PromptToSavePdfOrImage(subPath, out string? newPath)) { - subPath = placeholders.Substitute(newPath, true, i); + subPath = placeholders.Substitute(newPath!, true, i); } } // TODO: This placeholder handling is complex and wrong in some cases (e.g. FilePerScan with ext = "jpg") diff --git a/NAPS2.Lib/ImportExport/Images/SaveImagesOperation.cs b/NAPS2.Lib/ImportExport/Images/SaveImagesOperation.cs index 9bdcb3199..51123767e 100644 --- a/NAPS2.Lib/ImportExport/Images/SaveImagesOperation.cs +++ b/NAPS2.Lib/ImportExport/Images/SaveImagesOperation.cs @@ -1,6 +1,4 @@ -using Eto.Drawing; - -namespace NAPS2.ImportExport.Images; +namespace NAPS2.ImportExport.Images; // TODO: Cross-platform TIFF public class SaveImagesOperation : OperationBase @@ -47,9 +45,9 @@ public class SaveImagesOperation : OperationBase fileName = Path.Combine(subFileName, "$(n).jpg"); subFileName = placeholders.Substitute(fileName, batch); } - ImageFormat format = GetImageFormat(subFileName); + var format = ImageContext.GetFileFormatFromExtension(subFileName); - if (Equals(format, ImageFormat.Tiff) && !imageSettings.SinglePageTiff) + if (format == ImageFileFormat.Tiff && !imageSettings.SinglePageTiff) { if (File.Exists(subFileName)) { @@ -151,60 +149,22 @@ public class SaveImagesOperation : OperationBase return true; } - private void DoSaveImage(ProcessedImage image, string path, ImageFormat format, ImageSettings imageSettings) + private void DoSaveImage(ProcessedImage image, string path, ImageFileFormat format, ImageSettings imageSettings) { FileSystemHelper.EnsureParentDirExists(path); - if (Equals(format, ImageFormat.Tiff)) + if (format == ImageFileFormat.Tiff) { using var renderedImage = image.Render(); _imageContext.TiffWriter.SaveTiff(new[] { renderedImage }, path, imageSettings.TiffCompression.ToTiffCompressionType(), CancelToken); } - else if (Equals(format, ImageFormat.Jpeg)) - { - var quality = imageSettings.JpegQuality.Clamp(0, 100); - using var bitmap = image.Render(); - bitmap.Save(path, ImageFileFormat.Jpeg, quality); - } else { + // Quality will be ignored when not needed + // TODO: Scale quality differently for jpeg2000? + var quality = imageSettings.JpegQuality.Clamp(0, 100); using var bitmap = image.Render(); - var fileFormat = format switch - { - ImageFormat.Bitmap => ImageFileFormat.Bmp, - ImageFormat.Jpeg => ImageFileFormat.Jpeg, - ImageFormat.Png => ImageFileFormat.Png - }; - bitmap.Save(path, fileFormat); - } - } - - private static ImageFormat GetImageFormat(string fileName) - { - string extension = Path.GetExtension(fileName); - switch (extension.ToLower()) - { - // TODO: Get rid of unsupported file types - case ".bmp": - return ImageFormat.Bitmap; - // case ".emf": - // return ImageFormat.Emf; - case ".gif": - return ImageFormat.Gif; - // case ".ico": - // return ImageFormat.Icon; - case ".jpg": - case ".jpeg": - return ImageFormat.Jpeg; - case ".png": - return ImageFormat.Png; - case ".tif": - case ".tiff": - return ImageFormat.Tiff; - // case ".wmf": - // return ImageFormat.Wmf; - default: - return ImageFormat.Jpeg; + bitmap.Save(path, format, quality); } } } \ No newline at end of file diff --git a/NAPS2.Lib/Lang/Resources/MiscResources.Designer.cs b/NAPS2.Lib/Lang/Resources/MiscResources.Designer.cs index ca37bc745..1d9522826 100644 --- a/NAPS2.Lib/Lang/Resources/MiscResources.Designer.cs +++ b/NAPS2.Lib/Lang/Resources/MiscResources.Designer.cs @@ -1,7 +1,6 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -12,46 +11,32 @@ namespace NAPS2.Lang.Resources { using System; - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - public class MiscResources { + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class MiscResources { - private static global::System.Resources.ResourceManager resourceMan; + private static System.Resources.ResourceManager resourceMan; - private static global::System.Globalization.CultureInfo resourceCulture; + private static System.Globalization.CultureInfo resourceCulture; - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal MiscResources() { } - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Resources.ResourceManager ResourceManager { + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Resources.ResourceManager ResourceManager { get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NAPS2.Lang.Resources.MiscResources", typeof(MiscResources).Assembly); + if (object.Equals(null, resourceMan)) { + System.Resources.ResourceManager temp = new System.Resources.ResourceManager("NAPS2.Lang.Resources.MiscResources", typeof(MiscResources).Assembly); resourceMan = temp; } return resourceMan; } } - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - public static global::System.Globalization.CultureInfo Culture { + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Globalization.CultureInfo Culture { get { return resourceCulture; } @@ -60,1164 +45,783 @@ namespace NAPS2.Lang.Resources { } } - /// - /// Looks up a localized string similar to Acquiring data.... - /// - public static string AcquiringData { - get { - return ResourceManager.GetString("AcquiringData", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Operation in Progress. - /// - public static string ActiveOperations { - get { - return ResourceManager.GetString("ActiveOperations", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to All ({0}). - /// - public static string AllCount { - get { - return ResourceManager.GetString("AllCount", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An error occurred when trying to authorize.. - /// - public static string AuthError { - get { - return ResourceManager.GetString("AuthError", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Deskewing.... - /// - public static string AutoDeskewing { - get { - return ResourceManager.GetString("AutoDeskewing", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Deskew Progress. - /// - public static string AutoDeskewProgress { - get { - return ResourceManager.GetString("AutoDeskewProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An error occurred when trying to auto save.. - /// - public static string AutoSaveError { - get { - return ResourceManager.GetString("AutoSaveError", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An unknown error ocurred during the batch scan.. - /// - public static string BatchError { - get { - return ResourceManager.GetString("BatchError", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Batch cancelled.. - /// - public static string BatchStatusCancelled { - get { - return ResourceManager.GetString("BatchStatusCancelled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cancelling..... - /// - public static string BatchStatusCancelling { - get { - return ResourceManager.GetString("BatchStatusCancelling", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Batch completed successfully.. - /// - public static string BatchStatusComplete { - get { - return ResourceManager.GetString("BatchStatusComplete", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Batch scan stopped due to error.. - /// - public static string BatchStatusError { - get { - return ResourceManager.GetString("BatchStatusError", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Scanning page {0}.... - /// - public static string BatchStatusPage { - get { - return ResourceManager.GetString("BatchStatusPage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Saving batch results.... - /// - public static string BatchStatusSaving { - get { - return ResourceManager.GetString("BatchStatusSaving", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Scanning page {0} (scan {1}).... - /// - public static string BatchStatusScanPage { - get { - return ResourceManager.GetString("BatchStatusScanPage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Waiting for scan {0}.... - /// - public static string BatchStatusWaitingForScan { - get { - return ResourceManager.GetString("BatchStatusWaitingForScan", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cancel. - /// - public static string Cancel { - get { - return ResourceManager.GetString("Cancel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cancel Batch. - /// - public static string CancelBatch { - get { - return ResourceManager.GetString("CancelBatch", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Checking.... - /// - public static string CheckingForUpdates { - get { - return ResourceManager.GetString("CheckingForUpdates", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Choose Profile. - /// - public static string ChooseProfile { + internal static string ChooseProfile { get { return ResourceManager.GetString("ChooseProfile", resourceCulture); } } - /// - /// Looks up a localized string similar to Clear. - /// - public static string Clear { + internal static string Clear { get { return ResourceManager.GetString("Clear", resourceCulture); } } - /// - /// Looks up a localized string similar to Close. - /// - public static string Close { - get { - return ResourceManager.GetString("Close", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Are you sure you want to cancel the batch scan?. - /// - public static string ConfirmCancelBatch { - get { - return ResourceManager.GetString("ConfirmCancelBatch", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Are you sure you want to clear {0} item(s)?. - /// - public static string ConfirmClearItems { + internal static string ConfirmClearItems { get { return ResourceManager.GetString("ConfirmClearItems", resourceCulture); } } - /// - /// Looks up a localized string similar to Are you sure you want to delete "{0}"?. - /// - public static string ConfirmDelete { - get { - return ResourceManager.GetString("ConfirmDelete", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Are you sure you want to delete {0} item(s)?. - /// - public static string ConfirmDeleteItems { + internal static string ConfirmDeleteItems { get { return ResourceManager.GetString("ConfirmDeleteItems", resourceCulture); } } - /// - /// Looks up a localized string similar to Are you sure you want to delete {0} profiles?. - /// - public static string ConfirmDeleteMultipleProfiles { + internal static string ConfirmDeleteMultipleProfiles { get { return ResourceManager.GetString("ConfirmDeleteMultipleProfiles", resourceCulture); } } - /// - /// Looks up a localized string similar to Are you sure you want to delete the profile {0}?. - /// - public static string ConfirmDeleteSingleProfile { + internal static string ConfirmDeleteSingleProfile { get { return ResourceManager.GetString("ConfirmDeleteSingleProfile", resourceCulture); } } - /// - /// Looks up a localized string similar to The file {0} already exists. Do you want to overwrite it?. - /// - public static string ConfirmOverwriteFile { + internal static string ConfirmOverwriteFile { get { return ResourceManager.GetString("ConfirmOverwriteFile", resourceCulture); } } - /// - /// Looks up a localized string similar to Are you sure you want undo your changes to {0} image(s)?. - /// - public static string ConfirmResetImages { - get { - return ResourceManager.GetString("ConfirmResetImages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Copying.... - /// - public static string Copying { - get { - return ResourceManager.GetString("Copying", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Copy Progress. - /// - public static string CopyProgress { - get { - return ResourceManager.GetString("CopyProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Custom ({0}x{1} {2}). - /// - public static string CustomPageSizeFormat { - get { - return ResourceManager.GetString("CustomPageSizeFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Delete. - /// - public static string Delete { + internal static string Delete { get { return ResourceManager.GetString("Delete", resourceCulture); } } - /// - /// Looks up a localized string similar to The selected scanner is busy.. - /// - public static string DeviceBusy { - get { - return ResourceManager.GetString("DeviceBusy", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The scanner's cover is open.. - /// - public static string DeviceCoverOpen { - get { - return ResourceManager.GetString("DeviceCoverOpen", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The selected scanner could not be found.. - /// - public static string DeviceNotFound { + internal static string DeviceNotFound { get { return ResourceManager.GetString("DeviceNotFound", resourceCulture); } } - /// - /// Looks up a localized string similar to The selected scanner is offline.. - /// - public static string DeviceOffline { + internal static string DeviceOffline { get { return ResourceManager.GetString("DeviceOffline", resourceCulture); } } - /// - /// Looks up a localized string similar to The scanner has a paper jam.. - /// - public static string DevicePaperJam { - get { - return ResourceManager.GetString("DevicePaperJam", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The scanner is warming up.. - /// - public static string DeviceWarmingUp { - get { - return ResourceManager.GetString("DeviceWarmingUp", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Donate. - /// - public static string Donate { - get { - return ResourceManager.GetString("Donate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to NAPS2 is completely free. Consider making a donation.. - /// - public static string DonatePrompt { - get { - return ResourceManager.GetString("DonatePrompt", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You don't have permission to save files at this location.. - /// - public static string DontHavePermission { + internal static string DontHavePermission { get { return ResourceManager.GetString("DontHavePermission", resourceCulture); } } - /// - /// Looks up a localized string similar to Download Error. - /// - public static string DownloadError { - get { - return ResourceManager.GetString("DownloadError", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Download Needed. - /// - public static string DownloadNeeded { - get { - return ResourceManager.GetString("DownloadNeeded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The selected driver is not supported on this system.. - /// - public static string DriverNotSupported { - get { - return ResourceManager.GetString("DriverNotSupported", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An error occurred while trying to send an email.. - /// - public static string EmailError { - get { - return ResourceManager.GetString("EmailError", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Email PDF. - /// - public static string EmailPdf { - get { - return ResourceManager.GetString("EmailPdf", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Email PDF Progress. - /// - public static string EmailPdfProgress { - get { - return ResourceManager.GetString("EmailPdfProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Error. - /// - public static string Error { + internal static string Error { get { return ResourceManager.GetString("Error", resourceCulture); } } - /// - /// Looks up a localized string similar to An error occurred when trying to send the email.. - /// - public static string ErrorEmailing { - get { - return ResourceManager.GetString("ErrorEmailing", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An error occurred when trying to save the file.. - /// - public static string ErrorSaving { - get { - return ResourceManager.GetString("ErrorSaving", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Estimated download size: {0} MB. - /// - public static string EstimatedDownloadSize { - get { - return ResourceManager.GetString("EstimatedDownloadSize", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An operation is in progress. Are you sure you want to exit and cancel the operation?. - /// - public static string ExitWithActiveOperations { - get { - return ResourceManager.GetString("ExitWithActiveOperations", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You have unsaved changes. Are you sure you want to exit and discard those changes?. - /// - public static string ExitWithUnsavedChanges { - get { - return ResourceManager.GetString("ExitWithUnsavedChanges", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The file could not be overwritten because it is currently in use.. - /// - public static string FileInUse { - get { - return ResourceManager.GetString("FileInUse", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to One or more files could not be downloaded.. - /// - public static string FilesCouldNotBeDownloaded { - get { - return ResourceManager.GetString("FilesCouldNotBeDownloaded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} / {1} files. - /// - public static string FilesProgressFormat { - get { - return ResourceManager.GetString("FilesProgressFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to All Files. - /// - public static string FileTypeAllFiles { - get { - return ResourceManager.GetString("FileTypeAllFiles", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Bitmap Files (*.bmp). - /// - public static string FileTypeBmp { + internal static string FileTypeBmp { get { return ResourceManager.GetString("FileTypeBmp", resourceCulture); } } - /// - /// Looks up a localized string similar to Enhanced Windows MetaFile (*.emf). - /// - public static string FileTypeEmf { + internal static string FileTypeEmf { get { return ResourceManager.GetString("FileTypeEmf", resourceCulture); } } - /// - /// Looks up a localized string similar to Exchangeable Image File (*.exif). - /// - public static string FileTypeExif { + internal static string FileTypeExif { get { return ResourceManager.GetString("FileTypeExif", resourceCulture); } } - /// - /// Looks up a localized string similar to GIF File (*.gif). - /// - public static string FileTypeGif { + internal static string FileTypeGif { get { return ResourceManager.GetString("FileTypeGif", resourceCulture); } } - /// - /// Looks up a localized string similar to Image Files. - /// - public static string FileTypeImageFiles { - get { - return ResourceManager.GetString("FileTypeImageFiles", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to JPEG File (*.jpg, *.jpeg). - /// - public static string FileTypeJpeg { + internal static string FileTypeJpeg { get { return ResourceManager.GetString("FileTypeJpeg", resourceCulture); } } - /// - /// Looks up a localized string similar to PDF Document (*.pdf). - /// - public static string FileTypePdf { + internal static string FileTypePdf { get { return ResourceManager.GetString("FileTypePdf", resourceCulture); } } - /// - /// Looks up a localized string similar to PNG File (*.png). - /// - public static string FileTypePng { + internal static string FileTypePng { get { return ResourceManager.GetString("FileTypePng", resourceCulture); } } - /// - /// Looks up a localized string similar to TIFF File (*.tiff, *.tif). - /// - public static string FileTypeTiff { + internal static string FileTypeTiff { get { return ResourceManager.GetString("FileTypeTiff", resourceCulture); } } - /// - /// Looks up a localized string similar to Image saved.. - /// - public static string ImageSaved { + internal static string FileTypeJp2 { get { - return ResourceManager.GetString("ImageSaved", resourceCulture); + return ResourceManager.GetString("FileTypeJp2", resourceCulture); } } - /// - /// Looks up a localized string similar to {0} images saved.. - /// - public static string ImagesSaved { - get { - return ResourceManager.GetString("ImagesSaved", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The file '{0}' could not be imported.. - /// - public static string ImportErrorCouldNot { - get { - return ResourceManager.GetString("ImportErrorCouldNot", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The file '{0}' could not be imported. Only PDF files generated by NAPS2 can be imported.. - /// - public static string ImportErrorNAPS2Pdf { - get { - return ResourceManager.GetString("ImportErrorNAPS2Pdf", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Importing.... - /// - public static string Importing { - get { - return ResourceManager.GetString("Importing", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Importing {0}.... - /// - public static string ImportingFormat { - get { - return ResourceManager.GetString("ImportingFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Import Progress. - /// - public static string ImportProgress { - get { - return ResourceManager.GetString("ImportProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Install {0}. - /// - public static string Install { - get { - return ResourceManager.GetString("Install", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Installation Complete. - /// - public static string InstallComplete { - get { - return ResourceManager.GetString("InstallComplete", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Installation complete. Do you want to restart NAPS2 now?. - /// - public static string InstallCompletePromptRestart { - get { - return ResourceManager.GetString("InstallCompletePromptRestart", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Installation failed.. - /// - public static string InstallFailed { - get { - return ResourceManager.GetString("InstallFailed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Installation Failed. - /// - public static string InstallFailedTitle { - get { - return ResourceManager.GetString("InstallFailedTitle", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Listening on port {0}. - /// - public static string ListeningOnPort { - get { - return ResourceManager.GetString("ListeningOnPort", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} ({1}x{2} {3}). - /// - public static string NamedPageSizeFormat { - get { - return ResourceManager.GetString("NamedPageSizeFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Name missing.. - /// - public static string NameMissing { + internal static string NameMissing { get { return ResourceManager.GetString("NameMissing", resourceCulture); } } - /// - /// Looks up a localized string similar to NAPS2. - /// - public static string NAPS2 { + internal static string NAPS2 { get { return ResourceManager.GetString("NAPS2", resourceCulture); } } - /// - /// Looks up a localized string similar to NAPS2 Server. - /// - public static string Naps2Server { - get { - return ResourceManager.GetString("Naps2Server", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No device selected.. - /// - public static string NoDeviceSelected { + internal static string NoDeviceSelected { get { return ResourceManager.GetString("NoDeviceSelected", resourceCulture); } } - /// - /// Looks up a localized string similar to No scanning device was found.. - /// - public static string NoDevicesFound { + internal static string NoDevicesFound { get { return ResourceManager.GetString("NoDevicesFound", resourceCulture); } } - /// - /// Looks up a localized string similar to The selected scanner does not support using duplex. If your scanner is supposed to support duplex, try using a different driver.. - /// - public static string NoDuplexSupport { - get { - return ResourceManager.GetString("NoDuplexSupport", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The selected scanner does not support using a feeder. If your scanner does have a feeder, try using a different driver.. - /// - public static string NoFeederSupport { - get { - return ResourceManager.GetString("NoFeederSupport", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No pages are in the feeder.. - /// - public static string NoPagesInFeeder { - get { - return ResourceManager.GetString("NoPagesInFeeder", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No updates available.. - /// - public static string NoUpdates { - get { - return ResourceManager.GetString("NoUpdates", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to OCR Progress. - /// - public static string OcrProgress { - get { - return ResourceManager.GetString("OcrProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An update to OCR is available.. - /// - public static string OcrUpdateAvailable { - get { - return ResourceManager.GetString("OcrUpdateAvailable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to of {0}. - /// - public static string OfN { - get { - return ResourceManager.GetString("OfN", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Overwrite File. - /// - public static string OverwriteFile { + internal static string OverwriteFile { get { return ResourceManager.GetString("OverwriteFile", resourceCulture); } } - /// - /// Looks up a localized string similar to An additional component is needed to import this PDF file. Would you like to download it now?. - /// - public static string PdfImportComponentNeeded { - get { - return ResourceManager.GetString("PdfImportComponentNeeded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You do not have permission to copy content from the file '{0}'.. - /// - public static string PdfNoPermissionToExtractContent { - get { - return ResourceManager.GetString("PdfNoPermissionToExtractContent", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to PDF saved.. - /// - public static string PdfSaved { - get { - return ResourceManager.GetString("PdfSaved", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} of {1}. - /// - public static string PdfStatus { + internal static string PdfStatus { get { return ResourceManager.GetString("PdfStatus", resourceCulture); } } - /// - /// Looks up a localized string similar to Print. - /// - public static string Print { - get { - return ResourceManager.GetString("Print", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} / {1}. - /// - public static string ProgressFormat { - get { - return ResourceManager.GetString("ProgressFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recovering.... - /// - public static string Recovering { - get { - return ResourceManager.GetString("Recovering", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recovery Progress. - /// - public static string RecoveryProgress { - get { - return ResourceManager.GetString("RecoveryProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Reset Image. - /// - public static string ResetImage { - get { - return ResourceManager.GetString("ResetImage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Running OCR.... - /// - public static string RunningOcr { - get { - return ResourceManager.GetString("RunningOcr", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The SANE driver is not available. Make sure to install the required packages:. - /// - public static string SaneNotAvailable { - get { - return ResourceManager.GetString("SaneNotAvailable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Save Images. - /// - public static string SaveImages { - get { - return ResourceManager.GetString("SaveImages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Save Images Progress. - /// - public static string SaveImagesProgress { - get { - return ResourceManager.GetString("SaveImagesProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Save PDF. - /// - public static string SavePdf { - get { - return ResourceManager.GetString("SavePdf", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Save PDF Progress. - /// - public static string SavePdfProgress { - get { - return ResourceManager.GetString("SavePdfProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Saving {0}.... - /// - public static string SavingFormat { - get { - return ResourceManager.GetString("SavingFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Scan. - /// - public static string Scan { - get { - return ResourceManager.GetString("Scan", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Scanned Image. - /// - public static string ScannedImage { + internal static string ScannedImage { get { return ResourceManager.GetString("ScannedImage", resourceCulture); } } - /// - /// Looks up a localized string similar to Scanning page {0}. - /// - public static string ScanPageProgress { - get { - return ResourceManager.GetString("ScanPageProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Scanning page {0}.... - /// - public static string ScanProgressPage { - get { - return ResourceManager.GetString("ScanProgressPage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Selected ({0}). - /// - public static string SelectedCount { - get { - return ResourceManager.GetString("SelectedCount", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Select a profile before clicking Scan.. - /// - public static string SelectProfileBeforeScan { + internal static string SelectProfileBeforeScan { get { return ResourceManager.GetString("SelectProfileBeforeScan", resourceCulture); } } - /// - /// Looks up a localized string similar to Server started. - /// - public static string ServerStarted { - get { - return ResourceManager.GetString("ServerStarted", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} / {1} MB. - /// - public static string SizeProgress { - get { - return ResourceManager.GetString("SizeProgress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The OCR engine is not available. Make sure to install the required package:. - /// - public static string TesseractNotAvailable { - get { - return ResourceManager.GetString("TesseractNotAvailable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An error occurred with the scanning driver.. - /// - public static string UnknownDriverError { + internal static string UnknownDriverError { get { return ResourceManager.GetString("UnknownDriverError", resourceCulture); } } - /// - /// Looks up a localized string similar to Unsaved Changes. - /// - public static string UnsavedChanges { + internal static string Version { + get { + return ResourceManager.GetString("Version", resourceCulture); + } + } + + internal static string EmailError { + get { + return ResourceManager.GetString("EmailError", resourceCulture); + } + } + + internal static string InstallComplete { + get { + return ResourceManager.GetString("InstallComplete", resourceCulture); + } + } + + internal static string InstallCompletePromptRestart { + get { + return ResourceManager.GetString("InstallCompletePromptRestart", resourceCulture); + } + } + + internal static string InstallFailed { + get { + return ResourceManager.GetString("InstallFailed", resourceCulture); + } + } + + internal static string InstallFailedTitle { + get { + return ResourceManager.GetString("InstallFailedTitle", resourceCulture); + } + } + + internal static string AllCount { + get { + return ResourceManager.GetString("AllCount", resourceCulture); + } + } + + internal static string SelectedCount { + get { + return ResourceManager.GetString("SelectedCount", resourceCulture); + } + } + + internal static string EstimatedDownloadSize { + get { + return ResourceManager.GetString("EstimatedDownloadSize", resourceCulture); + } + } + + internal static string FilesProgressFormat { + get { + return ResourceManager.GetString("FilesProgressFormat", resourceCulture); + } + } + + internal static string SizeProgress { + get { + return ResourceManager.GetString("SizeProgress", resourceCulture); + } + } + + internal static string ImportErrorCouldNot { + get { + return ResourceManager.GetString("ImportErrorCouldNot", resourceCulture); + } + } + + internal static string ImportErrorNAPS2Pdf { + get { + return ResourceManager.GetString("ImportErrorNAPS2Pdf", resourceCulture); + } + } + + internal static string DownloadError { + get { + return ResourceManager.GetString("DownloadError", resourceCulture); + } + } + + internal static string FilesCouldNotBeDownloaded { + get { + return ResourceManager.GetString("FilesCouldNotBeDownloaded", resourceCulture); + } + } + + internal static string CustomPageSizeFormat { + get { + return ResourceManager.GetString("CustomPageSizeFormat", resourceCulture); + } + } + + internal static string Scan { + get { + return ResourceManager.GetString("Scan", resourceCulture); + } + } + + internal static string ConfirmResetImages { + get { + return ResourceManager.GetString("ConfirmResetImages", resourceCulture); + } + } + + internal static string ResetImage { + get { + return ResourceManager.GetString("ResetImage", resourceCulture); + } + } + + internal static string ExitWithUnsavedChanges { + get { + return ResourceManager.GetString("ExitWithUnsavedChanges", resourceCulture); + } + } + + internal static string ExitWithActiveOperations { + get { + return ResourceManager.GetString("ExitWithActiveOperations", resourceCulture); + } + } + + internal static string UnsavedChanges { get { return ResourceManager.GetString("UnsavedChanges", resourceCulture); } } - /// - /// Looks up a localized string similar to An update is available.. - /// - public static string UpdateAvailable { + internal static string ActiveOperations { get { - return ResourceManager.GetString("UpdateAvailable", resourceCulture); + return ResourceManager.GetString("ActiveOperations", resourceCulture); } } - /// - /// Looks up a localized string similar to Update checking is disabled.. - /// - public static string UpdateCheckDisabled { + internal static string ScanPageProgress { get { - return ResourceManager.GetString("UpdateCheckDisabled", resourceCulture); + return ResourceManager.GetString("ScanPageProgress", resourceCulture); } } - /// - /// Looks up a localized string similar to An error occured when trying to install the update.. - /// - public static string UpdateError { + internal static string NoFeederSupport { get { - return ResourceManager.GetString("UpdateError", resourceCulture); + return ResourceManager.GetString("NoFeederSupport", resourceCulture); } } - /// - /// Looks up a localized string similar to Update Progress. - /// - public static string UpdateProgress { + internal static string NoPagesInFeeder { + get { + return ResourceManager.GetString("NoPagesInFeeder", resourceCulture); + } + } + + internal static string PdfNoPermissionToExtractContent { + get { + return ResourceManager.GetString("PdfNoPermissionToExtractContent", resourceCulture); + } + } + + internal static string ErrorSaving { + get { + return ResourceManager.GetString("ErrorSaving", resourceCulture); + } + } + + internal static string OfN { + get { + return ResourceManager.GetString("OfN", resourceCulture); + } + } + + internal static string BatchError { + get { + return ResourceManager.GetString("BatchError", resourceCulture); + } + } + + internal static string BatchStatusCancelled { + get { + return ResourceManager.GetString("BatchStatusCancelled", resourceCulture); + } + } + + internal static string BatchStatusCancelling { + get { + return ResourceManager.GetString("BatchStatusCancelling", resourceCulture); + } + } + + internal static string BatchStatusComplete { + get { + return ResourceManager.GetString("BatchStatusComplete", resourceCulture); + } + } + + internal static string BatchStatusError { + get { + return ResourceManager.GetString("BatchStatusError", resourceCulture); + } + } + + internal static string BatchStatusPage { + get { + return ResourceManager.GetString("BatchStatusPage", resourceCulture); + } + } + + internal static string BatchStatusScanPage { + get { + return ResourceManager.GetString("BatchStatusScanPage", resourceCulture); + } + } + + internal static string BatchStatusWaitingForScan { + get { + return ResourceManager.GetString("BatchStatusWaitingForScan", resourceCulture); + } + } + + internal static string Cancel { + get { + return ResourceManager.GetString("Cancel", resourceCulture); + } + } + + internal static string Close { + get { + return ResourceManager.GetString("Close", resourceCulture); + } + } + + internal static string BatchStatusSaving { + get { + return ResourceManager.GetString("BatchStatusSaving", resourceCulture); + } + } + + internal static string NoDuplexSupport { + get { + return ResourceManager.GetString("NoDuplexSupport", resourceCulture); + } + } + + internal static string ProgressFormat { + get { + return ResourceManager.GetString("ProgressFormat", resourceCulture); + } + } + + internal static string ImportingFormat { + get { + return ResourceManager.GetString("ImportingFormat", resourceCulture); + } + } + + internal static string ImportProgress { + get { + return ResourceManager.GetString("ImportProgress", resourceCulture); + } + } + + internal static string Recovering { + get { + return ResourceManager.GetString("Recovering", resourceCulture); + } + } + + internal static string RecoveryProgress { + get { + return ResourceManager.GetString("RecoveryProgress", resourceCulture); + } + } + + internal static string SaveImages { + get { + return ResourceManager.GetString("SaveImages", resourceCulture); + } + } + + internal static string SaveImagesProgress { + get { + return ResourceManager.GetString("SaveImagesProgress", resourceCulture); + } + } + + internal static string SavePdf { + get { + return ResourceManager.GetString("SavePdf", resourceCulture); + } + } + + internal static string SavePdfProgress { + get { + return ResourceManager.GetString("SavePdfProgress", resourceCulture); + } + } + + internal static string SavingFormat { + get { + return ResourceManager.GetString("SavingFormat", resourceCulture); + } + } + + internal static string Print { + get { + return ResourceManager.GetString("Print", resourceCulture); + } + } + + internal static string Copying { + get { + return ResourceManager.GetString("Copying", resourceCulture); + } + } + + internal static string CopyProgress { + get { + return ResourceManager.GetString("CopyProgress", resourceCulture); + } + } + + internal static string Importing { + get { + return ResourceManager.GetString("Importing", resourceCulture); + } + } + + internal static string EmailPdf { + get { + return ResourceManager.GetString("EmailPdf", resourceCulture); + } + } + + internal static string EmailPdfProgress { + get { + return ResourceManager.GetString("EmailPdfProgress", resourceCulture); + } + } + + internal static string AutoSaveError { + get { + return ResourceManager.GetString("AutoSaveError", resourceCulture); + } + } + + internal static string FileTypeAllFiles { + get { + return ResourceManager.GetString("FileTypeAllFiles", resourceCulture); + } + } + + internal static string FileTypeImageFiles { + get { + return ResourceManager.GetString("FileTypeImageFiles", resourceCulture); + } + } + + internal static string DeviceBusy { + get { + return ResourceManager.GetString("DeviceBusy", resourceCulture); + } + } + + internal static string DeviceCoverOpen { + get { + return ResourceManager.GetString("DeviceCoverOpen", resourceCulture); + } + } + + internal static string DevicePaperJam { + get { + return ResourceManager.GetString("DevicePaperJam", resourceCulture); + } + } + + internal static string DeviceWarmingUp { + get { + return ResourceManager.GetString("DeviceWarmingUp", resourceCulture); + } + } + + internal static string OcrUpdateAvailable { + get { + return ResourceManager.GetString("OcrUpdateAvailable", resourceCulture); + } + } + + internal static string ImageSaved { + get { + return ResourceManager.GetString("ImageSaved", resourceCulture); + } + } + + internal static string ImagesSaved { + get { + return ResourceManager.GetString("ImagesSaved", resourceCulture); + } + } + + internal static string PdfSaved { + get { + return ResourceManager.GetString("PdfSaved", resourceCulture); + } + } + + internal static string NamedPageSizeFormat { + get { + return ResourceManager.GetString("NamedPageSizeFormat", resourceCulture); + } + } + + internal static string ConfirmDelete { + get { + return ResourceManager.GetString("ConfirmDelete", resourceCulture); + } + } + + internal static string FileInUse { + get { + return ResourceManager.GetString("FileInUse", resourceCulture); + } + } + + internal static string AutoDeskewing { + get { + return ResourceManager.GetString("AutoDeskewing", resourceCulture); + } + } + + internal static string AutoDeskewProgress { + get { + return ResourceManager.GetString("AutoDeskewProgress", resourceCulture); + } + } + + internal static string DownloadNeeded { + get { + return ResourceManager.GetString("DownloadNeeded", resourceCulture); + } + } + + internal static string PdfImportComponentNeeded { + get { + return ResourceManager.GetString("PdfImportComponentNeeded", resourceCulture); + } + } + + internal static string ConfirmCancelBatch { + get { + return ResourceManager.GetString("ConfirmCancelBatch", resourceCulture); + } + } + + internal static string CancelBatch { + get { + return ResourceManager.GetString("CancelBatch", resourceCulture); + } + } + + internal static string Donate { + get { + return ResourceManager.GetString("Donate", resourceCulture); + } + } + + internal static string DonatePrompt { + get { + return ResourceManager.GetString("DonatePrompt", resourceCulture); + } + } + + internal static string SaneNotAvailable { + get { + return ResourceManager.GetString("SaneNotAvailable", resourceCulture); + } + } + + internal static string TesseractNotAvailable { + get { + return ResourceManager.GetString("TesseractNotAvailable", resourceCulture); + } + } + + internal static string DriverNotSupported { + get { + return ResourceManager.GetString("DriverNotSupported", resourceCulture); + } + } + + internal static string OcrProgress { + get { + return ResourceManager.GetString("OcrProgress", resourceCulture); + } + } + + internal static string RunningOcr { + get { + return ResourceManager.GetString("RunningOcr", resourceCulture); + } + } + + internal static string UpdateProgress { get { return ResourceManager.GetString("UpdateProgress", resourceCulture); } } - /// - /// Looks up a localized string similar to Updating.... - /// - public static string Updating { + internal static string Updating { get { return ResourceManager.GetString("Updating", resourceCulture); } } - /// - /// Looks up a localized string similar to Uploading email.... - /// - public static string UploadingEmail { + internal static string NoUpdates { + get { + return ResourceManager.GetString("NoUpdates", resourceCulture); + } + } + + internal static string CheckingForUpdates { + get { + return ResourceManager.GetString("CheckingForUpdates", resourceCulture); + } + } + + internal static string UpdateCheckDisabled { + get { + return ResourceManager.GetString("UpdateCheckDisabled", resourceCulture); + } + } + + internal static string UpdateError { + get { + return ResourceManager.GetString("UpdateError", resourceCulture); + } + } + + internal static string Install { + get { + return ResourceManager.GetString("Install", resourceCulture); + } + } + + internal static string UpdateAvailable { + get { + return ResourceManager.GetString("UpdateAvailable", resourceCulture); + } + } + + internal static string AuthError { + get { + return ResourceManager.GetString("AuthError", resourceCulture); + } + } + + internal static string UploadingEmail { get { return ResourceManager.GetString("UploadingEmail", resourceCulture); } } - /// - /// Looks up a localized string similar to Version {0}. - /// - public static string Version { + internal static string ErrorEmailing { get { - return ResourceManager.GetString("Version", resourceCulture); + return ResourceManager.GetString("ErrorEmailing", resourceCulture); + } + } + + internal static string Naps2Server { + get { + return ResourceManager.GetString("Naps2Server", resourceCulture); + } + } + + internal static string ServerStarted { + get { + return ResourceManager.GetString("ServerStarted", resourceCulture); + } + } + + internal static string ListeningOnPort { + get { + return ResourceManager.GetString("ListeningOnPort", resourceCulture); + } + } + + internal static string ScanProgressPage { + get { + return ResourceManager.GetString("ScanProgressPage", resourceCulture); + } + } + + internal static string AcquiringData { + get { + return ResourceManager.GetString("AcquiringData", resourceCulture); } } } diff --git a/NAPS2.Lib/Lang/Resources/MiscResources.resx b/NAPS2.Lib/Lang/Resources/MiscResources.resx index 47b7a5ad0..4c49897f7 100644 --- a/NAPS2.Lib/Lang/Resources/MiscResources.resx +++ b/NAPS2.Lib/Lang/Resources/MiscResources.resx @@ -177,6 +177,9 @@ TIFF File (*.tiff, *.tif) + + JPEG2000 File (*.jp2, *.jpx) + Name missing. diff --git a/NAPS2.Lib/Paths.cs b/NAPS2.Lib/Paths.cs index 197b23bf7..c2dd6c1dd 100644 --- a/NAPS2.Lib/Paths.cs +++ b/NAPS2.Lib/Paths.cs @@ -13,6 +13,7 @@ public static class Paths #if STANDALONE AppDataPath = Path.Combine(ExecutablePath, "..", "Data"); #else + // TODO: Make lowercase for non-windows AppDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "NAPS2"); #endif var dataPathFromEnv = Environment.GetEnvironmentVariable("NAPS2_TEST_DATA"); diff --git a/NAPS2.Lib/WinForms/DesktopController.cs b/NAPS2.Lib/WinForms/DesktopController.cs index 2fd542f0f..5ba5c895c 100644 --- a/NAPS2.Lib/WinForms/DesktopController.cs +++ b/NAPS2.Lib/WinForms/DesktopController.cs @@ -33,6 +33,7 @@ public class DesktopController private readonly ImageClipboard _imageClipboard; private readonly ImageListActions _imageListActions; private readonly IWinFormsExportHelper _exportHelper; + private readonly DialogHelper _dialogHelper; private readonly DesktopImagesController _desktopImagesController; private readonly IDesktopScanController _desktopScanController; private readonly DesktopFormProvider _desktopFormProvider; @@ -46,6 +47,7 @@ public class DesktopController StillImage stillImage, IUpdateChecker updateChecker, INotificationManager notify, ImageTransfer imageTransfer, ImageClipboard imageClipboard, ImageListActions imageListActions, IWinFormsExportHelper exportHelper, + DialogHelper dialogHelper, DesktopImagesController desktopImagesController, IDesktopScanController desktopScanController, DesktopFormProvider desktopFormProvider, IScannedImagePrinter scannedImagePrinter) { @@ -63,6 +65,7 @@ public class DesktopController _imageClipboard = imageClipboard; _imageListActions = imageListActions; _exportHelper = exportHelper; + _dialogHelper = dialogHelper; _desktopImagesController = desktopImagesController; _desktopScanController = desktopScanController; _desktopFormProvider = desktopFormProvider; @@ -490,35 +493,9 @@ public class DesktopController public void Import() { - // TODO: Merge this into exporthelper/dialoghelper? - var ofd = new OpenFileDialog + if (_dialogHelper.PromptToImport(out var fileNames)) { - MultiSelect = true, - CheckFileExists = true, - Filters = - { - // TODO: Move filter logic somewhere common - new FileFilter(MiscResources.FileTypeAllFiles, ".*"), - new FileFilter(MiscResources.FileTypePdf, ".pdf"), - new FileFilter(MiscResources.FileTypeImageFiles, - ".bmp", ".emf", ".exif", ".gif", "jpg", ".jpeg", ".png", ".tiff", ".tif"), - new FileFilter(MiscResources.FileTypeBmp, ".bmp"), - new FileFilter(MiscResources.FileTypeEmf, ".emf"), - new FileFilter(MiscResources.FileTypeExif, ".exif"), - new FileFilter(MiscResources.FileTypeGif, ".gif"), - new FileFilter(MiscResources.FileTypeJpeg, ".jpg", ".jpeg"), - new FileFilter(MiscResources.FileTypePng, ".png"), - new FileFilter(MiscResources.FileTypeTiff, ".tiff", ".tif"), - } - }; - if (Paths.IsTestAppDataPath) - { - // For UI test automation we choose the appdata folder to find the prepared files to import - ofd.Directory = new Uri(Path.GetFullPath(Paths.AppData)); - } - if (ofd.ShowDialog(_desktopFormProvider.DesktopForm) == DialogResult.Ok) - { - ImportFiles(ofd.Filenames); + ImportFiles(fileNames!); } } } \ No newline at end of file diff --git a/NAPS2.Lib/WinForms/DialogHelper.cs b/NAPS2.Lib/WinForms/DialogHelper.cs index 160ccf212..335d7b505 100644 --- a/NAPS2.Lib/WinForms/DialogHelper.cs +++ b/NAPS2.Lib/WinForms/DialogHelper.cs @@ -2,9 +2,11 @@ public abstract class DialogHelper { - public abstract bool PromptToSavePdfOrImage(string? defaultPath, out string savePath); + public abstract bool PromptToSavePdfOrImage(string? defaultPath, out string? savePath); - public abstract bool PromptToSavePdf(string? defaultPath, out string savePath); + public abstract bool PromptToSavePdf(string? defaultPath, out string? savePath); - public abstract bool PromptToSaveImage(string? defaultPath, out string savePath); + public abstract bool PromptToSaveImage(string? defaultPath, out string? savePath); + + public abstract bool PromptToImport(out string[]? filePaths); } \ No newline at end of file diff --git a/NAPS2.Lib/WinForms/StubDialogHelper.cs b/NAPS2.Lib/WinForms/StubDialogHelper.cs index c43040daf..16d2ce949 100644 --- a/NAPS2.Lib/WinForms/StubDialogHelper.cs +++ b/NAPS2.Lib/WinForms/StubDialogHelper.cs @@ -2,21 +2,27 @@ public class StubDialogHelper : DialogHelper { - public override bool PromptToSavePdfOrImage(string defaultPath, out string savePath) + public override bool PromptToSavePdfOrImage(string? defaultPath, out string? savePath) { savePath = null; return false; } - public override bool PromptToSavePdf(string defaultPath, out string savePath) + public override bool PromptToSavePdf(string? defaultPath, out string? savePath) { savePath = null; return false; } - public override bool PromptToSaveImage(string defaultPath, out string savePath) + public override bool PromptToSaveImage(string? defaultPath, out string? savePath) { savePath = null; return false; } + + public override bool PromptToImport(out string[]? filePaths) + { + filePaths = null; + return false; + } } \ No newline at end of file diff --git a/NAPS2.Lib/WinForms/WinFormsDialogHelper.cs b/NAPS2.Lib/WinForms/WinFormsDialogHelper.cs index fd1f32b88..8b6b7f06a 100644 --- a/NAPS2.Lib/WinForms/WinFormsDialogHelper.cs +++ b/NAPS2.Lib/WinForms/WinFormsDialogHelper.cs @@ -1,37 +1,29 @@ using Eto.Forms; +using NAPS2.EtoForms; namespace NAPS2.WinForms; public class WinFormsDialogHelper : DialogHelper { private readonly Naps2Config _config; + private readonly FileFilters _fileFilters; - public WinFormsDialogHelper(Naps2Config config) + public WinFormsDialogHelper(Naps2Config config, FileFilters fileFilters) { _config = config; + _fileFilters = fileFilters; } - public override bool PromptToSavePdfOrImage(string? defaultPath, out string savePath) + public override bool PromptToSavePdfOrImage(string? defaultPath, out string? savePath) { var sd = new SaveFileDialog { CheckFileExists = false, // TODO // AddExtension = true, - // TODO: Move filter logic somewhere common - Filters = - { - new FileFilter(MiscResources.FileTypePdf, ".pdf"), - new FileFilter(MiscResources.FileTypeBmp, ".bmp"), - new FileFilter(MiscResources.FileTypeEmf, ".emf"), - new FileFilter(MiscResources.FileTypeExif, ".exif"), - new FileFilter(MiscResources.FileTypeGif, ".gif"), - new FileFilter(MiscResources.FileTypeJpeg, ".jpg", ".jpeg"), - new FileFilter(MiscResources.FileTypePng, ".png"), - new FileFilter(MiscResources.FileTypeTiff, ".tiff", ".tif"), - }, FileName = Path.GetFileName(defaultPath) }; + _fileFilters.Set(sd, FileFilterGroup.Pdf | FileFilterGroup.Image); SetDir(sd, defaultPath); if (sd.ShowDialog(null) == DialogResult.Ok) { @@ -42,18 +34,15 @@ public class WinFormsDialogHelper : DialogHelper return false; } - public override bool PromptToSavePdf(string? defaultPath, out string savePath) + public override bool PromptToSavePdf(string? defaultPath, out string? savePath) { var sd = new SaveFileDialog { CheckFileExists = false, // AddExtension = true, - Filters = - { - new FileFilter(MiscResources.FileTypePdf, ".pdf"), - }, FileName = Path.GetFileName(defaultPath) }; + _fileFilters.Set(sd, FileFilterGroup.Pdf); SetDir(sd, defaultPath); if (sd.ShowDialog(null) == DialogResult.Ok) { @@ -64,51 +53,17 @@ public class WinFormsDialogHelper : DialogHelper return false; } - public override bool PromptToSaveImage(string? defaultPath, out string savePath) + public override bool PromptToSaveImage(string? defaultPath, out string? savePath) { var sd = new SaveFileDialog { CheckFileExists = false, // AddExtension = true, - // TODO: Move filter logic somewhere common - Filters = - { - new FileFilter(MiscResources.FileTypeBmp, ".bmp"), - new FileFilter(MiscResources.FileTypeEmf, ".emf"), - new FileFilter(MiscResources.FileTypeExif, ".exif"), - new FileFilter(MiscResources.FileTypeGif, ".gif"), - new FileFilter(MiscResources.FileTypeJpeg, ".jpg", ".jpeg"), - new FileFilter(MiscResources.FileTypePng, ".png"), - new FileFilter(MiscResources.FileTypeTiff, ".tiff", ".tif"), - }, FileName = Path.GetFileName(defaultPath) }; + var lastExt = _config.Get(c => c.LastImageExt)?.ToLowerInvariant(); + _fileFilters.Set(sd, FileFilterGroup.Image, lastExt ?? "jpg"); SetDir(sd, defaultPath); - switch (_config.Get(c => c.LastImageExt)?.ToLowerInvariant()) - { - case "bmp": - sd.CurrentFilterIndex = 0; - break; - case "emf": - sd.CurrentFilterIndex = 1; - break; - case "exif": - sd.CurrentFilterIndex = 2; - break; - case "gif": - sd.CurrentFilterIndex = 3; - break; - case "png": - sd.CurrentFilterIndex = 5; - break; - case "tif": - case "tiff": - sd.CurrentFilterIndex = 6; - break; - default: // Jpeg - sd.CurrentFilterIndex = 4; - break; - } if (sd.ShowDialog(null) == DialogResult.Ok) { savePath = sd.FileName; @@ -138,4 +93,27 @@ public class WinFormsDialogHelper : DialogHelper dialog.Directory = new Uri(Path.GetFullPath(path)); } } + + public override bool PromptToImport(out string[]? filePaths) + { + var ofd = new OpenFileDialog + { + MultiSelect = true, + CheckFileExists = true + }; + _fileFilters.Set(ofd, + FileFilterGroup.AllFiles | FileFilterGroup.Pdf | FileFilterGroup.AllImages | FileFilterGroup.Image); + if (Paths.IsTestAppDataPath) + { + // For UI test automation we choose the appdata folder to find the prepared files to import + ofd.Directory = new Uri(Path.GetFullPath(Paths.AppData)); + } + if (ofd.ShowDialog(null) == DialogResult.Ok) + { + filePaths = ofd.Filenames.ToArray(); + return true; + } + filePaths = null; + return false; + } } \ No newline at end of file diff --git a/NAPS2.Lib/WinForms/WinFormsExportHelper.cs b/NAPS2.Lib/WinForms/WinFormsExportHelper.cs index e9d7d4738..f78372dca 100644 --- a/NAPS2.Lib/WinForms/WinFormsExportHelper.cs +++ b/NAPS2.Lib/WinForms/WinFormsExportHelper.cs @@ -38,7 +38,7 @@ public class WinFormsExportHelper : IWinFormsExportHelper } else { - if (!_dialogHelper.PromptToSavePdf(defaultFileName, out savePath)) + if (!_dialogHelper.PromptToSavePdf(defaultFileName, out savePath!)) { return false; } @@ -79,7 +79,7 @@ public class WinFormsExportHelper : IWinFormsExportHelper } else { - if (!_dialogHelper.PromptToSaveImage(_config.Get(c => c.ImageSettings.DefaultFileName), out savePath)) + if (!_dialogHelper.PromptToSaveImage(_config.Get(c => c.ImageSettings.DefaultFileName), out savePath!)) { return false; } diff --git a/NAPS2.Lib/WinForms/WinFormsOverwritePrompt.cs b/NAPS2.Lib/WinForms/WinFormsOverwritePrompt.cs index 65c921942..1bc05fed4 100644 --- a/NAPS2.Lib/WinForms/WinFormsOverwritePrompt.cs +++ b/NAPS2.Lib/WinForms/WinFormsOverwritePrompt.cs @@ -7,8 +7,9 @@ public class WinFormsOverwritePrompt : IOverwritePrompt public OverwriteResponse ConfirmOverwrite(string path) { string fileName = Path.GetFileName(path); - var dialogResult = MessageBox.Show(string.Format(MiscResources.ConfirmOverwriteFile, fileName), - MiscResources.OverwriteFile, MessageBoxButtons.YesNoCancel, MessageBoxType.Warning); + var dialogResult = Invoker.Current.InvokeGet(() => + MessageBox.Show(string.Format(MiscResources.ConfirmOverwriteFile, fileName), + MiscResources.OverwriteFile, MessageBoxButtons.YesNoCancel, MessageBoxType.Warning)); return dialogResult switch { DialogResult.Yes => OverwriteResponse.Yes, diff --git a/NAPS2.Sdk.Tests/ImageResources.Designer.cs b/NAPS2.Sdk.Tests/ImageResources.Designer.cs index e540e6545..eb43f7a54 100644 --- a/NAPS2.Sdk.Tests/ImageResources.Designer.cs +++ b/NAPS2.Sdk.Tests/ImageResources.Designer.cs @@ -11,46 +11,32 @@ namespace NAPS2.Sdk.Tests { using System; - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class ImageResources { - private static global::System.Resources.ResourceManager resourceMan; + private static System.Resources.ResourceManager resourceMan; - private static global::System.Globalization.CultureInfo resourceCulture; + private static System.Globalization.CultureInfo resourceCulture; - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal ImageResources() { } - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Resources.ResourceManager ResourceManager { get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NAPS2.Sdk.Tests.ImageResources", typeof(ImageResources).Assembly); + if (object.Equals(null, resourceMan)) { + System.Resources.ResourceManager temp = new System.Resources.ResourceManager("NAPS2.Sdk.Tests.ImageResources", typeof(ImageResources).Assembly); resourceMan = temp; } return resourceMan; } } - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Globalization.CultureInfo Culture { get { return resourceCulture; } @@ -59,29 +45,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] animals_tiff { - get { - object obj = ResourceManager.GetObject("animals_tiff", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] deskewed { - get { - object obj = ResourceManager.GetObject("deskewed", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog { get { object obj = ResourceManager.GetObject("dog", resourceCulture); @@ -89,69 +52,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_alpha { - get { - object obj = ResourceManager.GetObject("dog_alpha", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_alpha_tiff { - get { - object obj = ResourceManager.GetObject("dog_alpha_tiff", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_b_n300 { - get { - object obj = ResourceManager.GetObject("dog_b_n300", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_b_p300 { - get { - object obj = ResourceManager.GetObject("dog_b_p300", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_b_p300_thumb_256 { - get { - object obj = ResourceManager.GetObject("dog_b_p300_thumb_256", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_bmp { - get { - object obj = ResourceManager.GetObject("dog_bmp", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_bw { get { object obj = ResourceManager.GetObject("dog_bw", resourceCulture); @@ -159,9 +59,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_bw_24bit { get { object obj = ResourceManager.GetObject("dog_bw_24bit", resourceCulture); @@ -169,29 +66,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_bw_bmp { - get { - object obj = ResourceManager.GetObject("dog_bw_bmp", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_bw_invertpal { - get { - object obj = ResourceManager.GetObject("dog_bw_invertpal", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_bw_jpg { get { object obj = ResourceManager.GetObject("dog_bw_jpg", resourceCulture); @@ -199,19 +73,13 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_bw_p300 { + internal static byte[] dog_bw_bmp { get { - object obj = ResourceManager.GetObject("dog_bw_p300", resourceCulture); + object obj = ResourceManager.GetObject("dog_bw_bmp", resourceCulture); return ((byte[])(obj)); } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_bw_tiff { get { object obj = ResourceManager.GetObject("dog_bw_tiff", resourceCulture); @@ -219,9 +87,34 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// + internal static byte[] dog_bw_p300 { + get { + object obj = ResourceManager.GetObject("dog_bw_p300", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_bw_invertpal { + get { + object obj = ResourceManager.GetObject("dog_bw_invertpal", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_b_n300 { + get { + object obj = ResourceManager.GetObject("dog_b_n300", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_b_p300 { + get { + object obj = ResourceManager.GetObject("dog_b_p300", resourceCulture); + return ((byte[])(obj)); + } + } + internal static byte[] dog_c_5_10_15_20 { get { object obj = ResourceManager.GetObject("dog_c_5_10_15_20", resourceCulture); @@ -229,9 +122,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_c_n300 { get { object obj = ResourceManager.GetObject("dog_c_n300", resourceCulture); @@ -239,9 +129,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_c_p300 { get { object obj = ResourceManager.GetObject("dog_c_p300", resourceCulture); @@ -249,69 +136,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_gray { - get { - object obj = ResourceManager.GetObject("dog_gray", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_gray_24bit_png { - get { - object obj = ResourceManager.GetObject("dog_gray_24bit_png", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_gray_24bit_tiff { - get { - object obj = ResourceManager.GetObject("dog_gray_24bit_tiff", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_gray_bmp { - get { - object obj = ResourceManager.GetObject("dog_gray_bmp", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_gray_png { - get { - object obj = ResourceManager.GetObject("dog_gray_png", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_gray_tiff { - get { - object obj = ResourceManager.GetObject("dog_gray_tiff", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_h_n300 { get { object obj = ResourceManager.GetObject("dog_h_n300", resourceCulture); @@ -319,9 +143,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_h_p300 { get { object obj = ResourceManager.GetObject("dog_h_p300", resourceCulture); @@ -329,59 +150,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_huge { - get { - object obj = ResourceManager.GetObject("dog_huge", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_huge_png { - get { - object obj = ResourceManager.GetObject("dog_huge_png", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_low_quality { - get { - object obj = ResourceManager.GetObject("dog_low_quality", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_mask { - get { - object obj = ResourceManager.GetObject("dog_mask", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_png { - get { - object obj = ResourceManager.GetObject("dog_png", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_r_180 { get { object obj = ResourceManager.GetObject("dog_r_180", resourceCulture); @@ -389,9 +157,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_r_n45 { get { object obj = ResourceManager.GetObject("dog_r_n45", resourceCulture); @@ -399,9 +164,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_r_p46 { get { object obj = ResourceManager.GetObject("dog_r_p46", resourceCulture); @@ -409,9 +171,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_r_p90 { get { object obj = ResourceManager.GetObject("dog_r_p90", resourceCulture); @@ -419,29 +178,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_s_n300 { - get { - object obj = ResourceManager.GetObject("dog_s_n300", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_s_p300 { - get { - object obj = ResourceManager.GetObject("dog_s_p300", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_sc_50pct { get { object obj = ResourceManager.GetObject("dog_sc_50pct", resourceCulture); @@ -449,9 +185,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_sh_n1000 { get { object obj = ResourceManager.GetObject("dog_sh_n1000", resourceCulture); @@ -459,9 +192,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] dog_sh_p1000 { get { object obj = ResourceManager.GetObject("dog_sh_p1000", resourceCulture); @@ -469,9 +199,20 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// + internal static byte[] dog_s_n300 { + get { + object obj = ResourceManager.GetObject("dog_s_n300", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_s_p300 { + get { + object obj = ResourceManager.GetObject("dog_s_p300", resourceCulture); + return ((byte[])(obj)); + } + } + internal static byte[] dog_thumb_256 { get { object obj = ResourceManager.GetObject("dog_thumb_256", resourceCulture); @@ -479,49 +220,13 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] dog_tiff { + internal static byte[] deskewed { get { - object obj = ResourceManager.GetObject("dog_tiff", resourceCulture); + object obj = ResourceManager.GetObject("deskewed", resourceCulture); return ((byte[])(obj)); } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] image_upc_barcode { - get { - object obj = ResourceManager.GetObject("image_upc_barcode", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] ocr_test { - get { - object obj = ResourceManager.GetObject("ocr_test", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] patcht { - get { - object obj = ResourceManager.GetObject("patcht", resourceCulture); - return ((byte[])(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] skewed { get { object obj = ResourceManager.GetObject("skewed", resourceCulture); @@ -529,9 +234,6 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] skewed_bw { get { object obj = ResourceManager.GetObject("skewed_bw", resourceCulture); @@ -539,14 +241,158 @@ namespace NAPS2.Sdk.Tests { } } - /// - /// Looks up a localized resource of type System.Byte[]. - /// internal static byte[] stock_cat { get { object obj = ResourceManager.GetObject("stock_cat", resourceCulture); return ((byte[])(obj)); } } + + internal static byte[] dog_b_p300_thumb_256 { + get { + object obj = ResourceManager.GetObject("dog_b_p300_thumb_256", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] patcht { + get { + object obj = ResourceManager.GetObject("patcht", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] ocr_test { + get { + object obj = ResourceManager.GetObject("ocr_test", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] image_upc_barcode { + get { + object obj = ResourceManager.GetObject("image_upc_barcode", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_low_quality { + get { + object obj = ResourceManager.GetObject("dog_low_quality", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_alpha { + get { + object obj = ResourceManager.GetObject("dog_alpha", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_alpha_tiff { + get { + object obj = ResourceManager.GetObject("dog_alpha_tiff", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_mask { + get { + object obj = ResourceManager.GetObject("dog_mask", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_jp2 { + get { + object obj = ResourceManager.GetObject("dog_jp2", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_png { + get { + object obj = ResourceManager.GetObject("dog_png", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_bmp { + get { + object obj = ResourceManager.GetObject("dog_bmp", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_tiff { + get { + object obj = ResourceManager.GetObject("dog_tiff", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_huge { + get { + object obj = ResourceManager.GetObject("dog_huge", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_huge_png { + get { + object obj = ResourceManager.GetObject("dog_huge_png", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] animals_tiff { + get { + object obj = ResourceManager.GetObject("animals_tiff", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_gray { + get { + object obj = ResourceManager.GetObject("dog_gray", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_gray_png { + get { + object obj = ResourceManager.GetObject("dog_gray_png", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_gray_24bit_png { + get { + object obj = ResourceManager.GetObject("dog_gray_24bit_png", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_gray_bmp { + get { + object obj = ResourceManager.GetObject("dog_gray_bmp", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_gray_tiff { + get { + object obj = ResourceManager.GetObject("dog_gray_tiff", resourceCulture); + return ((byte[])(obj)); + } + } + + internal static byte[] dog_gray_24bit_tiff { + get { + object obj = ResourceManager.GetObject("dog_gray_24bit_tiff", resourceCulture); + return ((byte[])(obj)); + } + } } } diff --git a/NAPS2.Sdk.Tests/ImageResources.resx b/NAPS2.Sdk.Tests/ImageResources.resx index a6000bb81..0918a1f8e 100644 --- a/NAPS2.Sdk.Tests/ImageResources.resx +++ b/NAPS2.Sdk.Tests/ImageResources.resx @@ -229,6 +229,9 @@ Resources\dog_mask.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Resources\dog.jp2;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + Resources\dog.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 diff --git a/NAPS2.Sdk.Tests/Images/LoadSaveTests.cs b/NAPS2.Sdk.Tests/Images/LoadSaveTests.cs index c5b5b00d6..9b255526b 100644 --- a/NAPS2.Sdk.Tests/Images/LoadSaveTests.cs +++ b/NAPS2.Sdk.Tests/Images/LoadSaveTests.cs @@ -172,6 +172,11 @@ public class LoadSaveTests : ContextualTests new[] { "dog_bw" }, new[] { ImagePixelFormat.Gray8 }, false }, new object[] + { + ImageFileFormat.Jpeg2000, ".jp2", "dog_jp2", + new[] { "dog" }, new[] { ImagePixelFormat.RGB24 }, false + }, + new object[] { ImageFileFormat.Bmp, ".bmp", "dog_bmp", new[] { "dog" }, new[] { ImagePixelFormat.RGB24 }, true diff --git a/NAPS2.Sdk.Tests/Resources/dog.jp2 b/NAPS2.Sdk.Tests/Resources/dog.jp2 new file mode 100644 index 0000000000000000000000000000000000000000..a770e1ddd3b4969102c00e395fd926bee2deea33 GIT binary patch literal 131707 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 z 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
35)RuvYiX|SDbgagtXS0HXYw> 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