Fix ninject weirdness by using a ScannedImageRenderer class

This commit is contained in:
Ben Olden-Cooligan 2017-05-20 02:38:20 -04:00
parent c6866782a6
commit 6d0d5a7b1c
20 changed files with 127 additions and 68 deletions

View File

@ -20,16 +20,20 @@ namespace NAPS2.ImportExport.Images
private readonly ImageSettingsContainer imageSettingsContainer;
private readonly IOverwritePrompt overwritePrompt;
private readonly ThreadFactory threadFactory;
private readonly ScannedImageRenderer scannedImageRenderer;
private readonly TiffHelper tiffHelper;
private bool cancel;
private Thread thread;
public SaveImagesOperation(FileNamePlaceholders fileNamePlaceholders, ImageSettingsContainer imageSettingsContainer, IOverwritePrompt overwritePrompt, ThreadFactory threadFactory)
public SaveImagesOperation(FileNamePlaceholders fileNamePlaceholders, ImageSettingsContainer imageSettingsContainer, IOverwritePrompt overwritePrompt, ThreadFactory threadFactory, ScannedImageRenderer scannedImageRenderer, TiffHelper tiffHelper)
{
this.fileNamePlaceholders = fileNamePlaceholders;
this.imageSettingsContainer = imageSettingsContainer;
this.overwritePrompt = overwritePrompt;
this.threadFactory = threadFactory;
this.scannedImageRenderer = scannedImageRenderer;
this.tiffHelper = tiffHelper;
ProgressTitle = MiscResources.SaveImagesProgress;
AllowCancel = true;
@ -76,7 +80,7 @@ namespace NAPS2.ImportExport.Images
}
}
Status.StatusText = string.Format(MiscResources.SavingFormat, Path.GetFileName(subFileName));
Status.Success = TiffHelper.SaveMultipage(images, subFileName, j =>
Status.Success = tiffHelper.SaveMultipage(images, subFileName, j =>
{
Status.CurrentProgress = j;
InvokeStatusChanged();
@ -109,7 +113,7 @@ namespace NAPS2.ImportExport.Images
return;
}
}
using (Bitmap baseImage = img.GetImage())
using (Bitmap baseImage = scannedImageRenderer.Render(img))
{
if (images.Count == 1)
{

View File

@ -9,9 +9,16 @@ using NAPS2.Util;
namespace NAPS2.ImportExport.Images
{
class TiffHelper
public class TiffHelper
{
public static bool SaveMultipage(List<ScannedImage> images, string location, Func<int, bool> progressCallback)
private readonly ScannedImageRenderer scannedImageRenderer;
public TiffHelper(ScannedImageRenderer scannedImageRenderer)
{
this.scannedImageRenderer = scannedImageRenderer;
}
public bool SaveMultipage(List<ScannedImage> images, string location, Func<int, bool> progressCallback)
{
try
{
@ -30,7 +37,7 @@ namespace NAPS2.ImportExport.Images
Encoder iparam = Encoder.Compression;
var iparamPara = new EncoderParameter(iparam, (long)(EncoderValue.CompressionLZW));
iparams.Param[0] = iparamPara;
using (var bitmap = images[0].GetImage())
using (var bitmap = scannedImageRenderer.Render(images[0]))
{
bitmap.Save(location, codecInfo, iparams);
}
@ -53,7 +60,7 @@ namespace NAPS2.ImportExport.Images
encoderParams.Param[1] = SaveEncodeParam;
File.Delete(location);
using (var bitmap0 = images[0].GetImage())
using (var bitmap0 = scannedImageRenderer.Render(images[0]))
{
bitmap0.Save(location, codecInfo, encoderParams);
@ -74,7 +81,7 @@ namespace NAPS2.ImportExport.Images
(long) EncoderValue.CompressionLZW);
encoderParams.Param[0] = CompressionEncodeParam;
encoderParams.Param[1] = SaveEncodeParam;
using (var bitmap = images[i].GetImage())
using (var bitmap = scannedImageRenderer.Render(images[i]))
{
bitmap0.SaveAdd(bitmap, encoderParams);
}
@ -95,7 +102,8 @@ namespace NAPS2.ImportExport.Images
}
}
private static ImageCodecInfo GetCodecForString(string type)
private ImageCodecInfo GetCodecForString(string type)
{
ImageCodecInfo[] info = ImageCodecInfo.GetImageEncoders();
return info.FirstOrDefault(t => t.FormatDescription.Equals(type));

View File

@ -10,7 +10,6 @@ using NAPS2.Config;
using NAPS2.Lang.Resources;
using NAPS2.Ocr;
using NAPS2.Scan;
using NAPS2.Scan.Images;
using NAPS2.Util;
using NAPS2.WinForms;
@ -22,17 +21,15 @@ namespace NAPS2.ImportExport.Pdf
private readonly IFormFactory formFactory;
private readonly AppConfigManager appConfigManager;
private readonly IErrorOutput errorOutput;
private readonly ThumbnailRenderer thumbnailRenderer;
private readonly Lazy<byte[]> gsLibBytes;
public GhostscriptPdfRenderer(OcrDependencyManager ocrDependencyManager, IFormFactory formFactory, AppConfigManager appConfigManager, IErrorOutput errorOutput, ThumbnailRenderer thumbnailRenderer)
public GhostscriptPdfRenderer(OcrDependencyManager ocrDependencyManager, IFormFactory formFactory, AppConfigManager appConfigManager, IErrorOutput errorOutput)
{
this.ocrDependencyManager = ocrDependencyManager;
this.formFactory = formFactory;
this.appConfigManager = appConfigManager;
this.errorOutput = errorOutput;
this.thumbnailRenderer = thumbnailRenderer;
gsLibBytes = new Lazy<byte[]>(() => File.ReadAllBytes(ocrDependencyManager.Components.Ghostscript921.Path));
}

View File

@ -18,10 +18,12 @@ namespace NAPS2.ImportExport.Pdf
public class PdfSharpExporter : IPdfExporter
{
private readonly IOcrEngine ocrEngine;
private readonly ScannedImageRenderer scannedImageRenderer;
public PdfSharpExporter(IOcrEngine ocrEngine)
public PdfSharpExporter(IOcrEngine ocrEngine, ScannedImageRenderer scannedImageRenderer)
{
this.ocrEngine = ocrEngine;
this.scannedImageRenderer = scannedImageRenderer;
}
public bool Export(string path, IEnumerable<ScannedImage> images, PdfSettings settings, string ocrLanguageCode, Func<int, bool> progressCallback)
@ -93,7 +95,7 @@ namespace NAPS2.ImportExport.Pdf
}
else
{
using (Stream stream = image.GetImageStream())
using (Stream stream = scannedImageRenderer.RenderToStream(image))
using (var img = new Bitmap(stream))
{
if (!progressCallback(progress))
@ -134,7 +136,7 @@ namespace NAPS2.ImportExport.Pdf
return null;
}
using (Stream stream = image.GetImageStream())
using (Stream stream = scannedImageRenderer.RenderToStream(image))
using (var img = new Bitmap(stream))
{
if (!progressCallback(progress))

View File

@ -21,12 +21,14 @@ namespace NAPS2.ImportExport.Pdf
private readonly IErrorOutput errorOutput;
private readonly IPdfPasswordProvider pdfPasswordProvider;
private readonly ThumbnailRenderer thumbnailRenderer;
private readonly ScannedImageRenderer scannedImageRenderer;
public PdfSharpImporter(IErrorOutput errorOutput, IPdfPasswordProvider pdfPasswordProvider, ThumbnailRenderer thumbnailRenderer)
public PdfSharpImporter(IErrorOutput errorOutput, IPdfPasswordProvider pdfPasswordProvider, ThumbnailRenderer thumbnailRenderer, ScannedImageRenderer scannedImageRenderer)
{
this.errorOutput = errorOutput;
this.pdfPasswordProvider = pdfPasswordProvider;
this.thumbnailRenderer = thumbnailRenderer;
this.scannedImageRenderer = scannedImageRenderer;
}
public IEnumerable<ScannedImage> Import(string filePath, Func<int, int, bool> progressCallback)
@ -144,7 +146,7 @@ namespace NAPS2.ImportExport.Pdf
document.Save(pdfPath);
var image = ScannedImage.FromSinglePagePdf(pdfPath, false);
using (var bitmap = image.GetImage())
using (var bitmap = scannedImageRenderer.Render(image))
{
image.SetThumbnail(thumbnailRenderer.RenderThumbnail(bitmap));
}

View File

@ -11,6 +11,13 @@ namespace NAPS2.ImportExport.Pdf
{
public class PrintDocumentPrinter : IScannedImagePrinter
{
private readonly ScannedImageRenderer scannedImageRenderer;
public PrintDocumentPrinter(ScannedImageRenderer scannedImageRenderer)
{
this.scannedImageRenderer = scannedImageRenderer;
}
public bool PromptToPrint(List<ScannedImage> images, List<ScannedImage> selectedImages)
{
if (!images.Any())
@ -65,7 +72,7 @@ namespace NAPS2.ImportExport.Pdf
int i = 0;
printDocument.PrintPage += (sender, e) =>
{
var image = imagesToPrint[i].GetImage();
var image = scannedImageRenderer.Render(imagesToPrint[i]);
try
{
var pb = e.PageBounds;

View File

@ -130,6 +130,7 @@
<Compile Include="Ocr\PlatformSupport.cs" />
<Compile Include="Scan\Images\AutoDeskew.cs" />
<Compile Include="Operation\IOperationProgress.cs" />
<Compile Include="Scan\Images\ScannedImageRenderer.cs" />
<Compile Include="Util\DownloadFormat.cs" />
<Compile Include="Util\DownloadInfo.cs" />
<Compile Include="Ocr\Language.cs" />

View File

@ -17,14 +17,16 @@ namespace NAPS2.Scan.Images
{
private readonly ThreadFactory threadFactory;
private readonly ThumbnailRenderer thumbnailRenderer;
private readonly ScannedImageRenderer scannedImageRenderer;
private bool cancel;
private Thread thread;
public DeskewOperation(ThreadFactory threadFactory, ThumbnailRenderer thumbnailRenderer)
public DeskewOperation(ThreadFactory threadFactory, ThumbnailRenderer thumbnailRenderer, ScannedImageRenderer scannedImageRenderer)
{
this.threadFactory = threadFactory;
this.thumbnailRenderer = thumbnailRenderer;
this.scannedImageRenderer = scannedImageRenderer;
AllowCancel = true;
}
@ -47,7 +49,7 @@ namespace NAPS2.Scan.Images
{
return null;
}
Bitmap bitmap = img.GetImage();
Bitmap bitmap = scannedImageRenderer.Render(img);
try
{
if (cancel)

View File

@ -9,7 +9,8 @@ namespace NAPS2.Scan.Images
{
public class NullThumbnailRenderer : ThumbnailRenderer
{
public NullThumbnailRenderer(IUserConfigManager userConfigManager) : base(userConfigManager)
public NullThumbnailRenderer(IUserConfigManager userConfigManager, ScannedImageRenderer scannedImageRenderer)
: base(userConfigManager, scannedImageRenderer)
{
}

View File

@ -23,8 +23,6 @@ namespace NAPS2.Scan.Images
private Bitmap thumbnail;
public static IPdfRenderer PdfRenderer { get; set; }
public static ScannedImage FromSinglePagePdf(string pdfPath, bool copy)
{
return new ScannedImage(pdfPath, copy);
@ -76,27 +74,6 @@ namespace NAPS2.Scan.Images
public long Size => new FileInfo(recoveryImage.FilePath).Length;
public Bitmap GetImage()
{
var bitmap = recoveryImage.FileFormat == null
? PdfRenderer.Render(recoveryImage.FilePath).Single()
: new Bitmap(recoveryImage.FilePath);
lock (transformList)
{
return Transform.PerformAll(bitmap, transformList);
}
}
public Stream GetImageStream()
{
using (var transformed = GetImage())
{
var stream = new MemoryStream();
transformed.Save(stream, recoveryImage.FileFormat ?? (RecoveryIndexImage.HighQuality ? ImageFormat.Png : ImageFormat.Jpeg));
return stream;
}
}
public void Dispose()
{
lock (this)

View File

@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using NAPS2.ImportExport.Pdf;
using NAPS2.Recovery;
using NAPS2.Scan.Images.Transforms;
namespace NAPS2.Scan.Images
{
public class ScannedImageRenderer
{
private readonly IPdfRenderer pdfRenderer;
public ScannedImageRenderer(IPdfRenderer pdfRenderer)
{
this.pdfRenderer = pdfRenderer;
}
public Bitmap Render(ScannedImage image)
{
var bitmap = image.FileFormat == null
? pdfRenderer.Render(image.RecoveryFilePath).Single()
: new Bitmap(image.RecoveryFilePath);
lock (image.RecoveryIndexImage.TransformList)
{
return Transform.PerformAll(bitmap, image.RecoveryIndexImage.TransformList);
}
}
public Stream RenderToStream(ScannedImage image)
{
using (var transformed = Render(image))
{
var stream = new MemoryStream();
transformed.Save(stream, image.FileFormat ?? (image.RecoveryIndexImage.HighQuality ? ImageFormat.Png : ImageFormat.Jpeg));
return stream;
}
}
}
}

View File

@ -15,20 +15,22 @@ namespace NAPS2.Scan.Images
public const int STEP_SIZE = 32;
private readonly IUserConfigManager userConfigManager;
private readonly ScannedImageRenderer scannedImageRenderer;
public ThumbnailRenderer(IUserConfigManager userConfigManager)
public ThumbnailRenderer(IUserConfigManager userConfigManager, ScannedImageRenderer scannedImageRenderer)
{
this.userConfigManager = userConfigManager;
this.scannedImageRenderer = scannedImageRenderer;
}
public Bitmap RenderThumbnail(ScannedImage scannedImage)
{
return RenderThumbnail(scannedImage.GetImage(), userConfigManager.Config.ThumbnailSize);
return RenderThumbnail(scannedImageRenderer.Render(scannedImage), userConfigManager.Config.ThumbnailSize);
}
public Bitmap RenderThumbnail(ScannedImage scannedImage, int size)
{
return RenderThumbnail(scannedImage.GetImage(), size);
return RenderThumbnail(scannedImageRenderer.Render(scannedImage), size);
}
public Bitmap RenderThumbnail(Bitmap b)

View File

@ -14,16 +14,18 @@ namespace NAPS2.WinForms
{
private readonly ChangeTracker changeTracker;
private readonly ThumbnailRenderer thumbnailRenderer;
private readonly ScannedImageRenderer scannedImageRenderer;
private Bitmap workingImage;
private bool previewOutOfDate;
private bool working;
private Timer previewTimer;
public FBrightness(ChangeTracker changeTracker, ThumbnailRenderer thumbnailRenderer)
public FBrightness(ChangeTracker changeTracker, ThumbnailRenderer thumbnailRenderer, ScannedImageRenderer scannedImageRenderer)
{
this.changeTracker = changeTracker;
this.thumbnailRenderer = thumbnailRenderer;
this.scannedImageRenderer = scannedImageRenderer;
InitializeComponent();
BrightnessTransform = new BrightnessTransform();
@ -66,7 +68,7 @@ namespace NAPS2.WinForms
.Activate();
Size = new Size(600, 600);
workingImage = Image.GetImage();
workingImage = scannedImageRenderer.Render(Image);
pictureBox.Image = (Bitmap)workingImage.Clone();
UpdatePreviewBox();
}

View File

@ -14,16 +14,18 @@ namespace NAPS2.WinForms
{
private readonly ChangeTracker changeTracker;
private readonly ThumbnailRenderer thumbnailRenderer;
private readonly ScannedImageRenderer scannedImageRenderer;
private Bitmap workingImage;
private bool previewOutOfDate;
private bool working;
private Timer previewTimer;
public FContrast(ChangeTracker changeTracker, ThumbnailRenderer thumbnailRenderer)
public FContrast(ChangeTracker changeTracker, ThumbnailRenderer thumbnailRenderer, ScannedImageRenderer scannedImageRenderer)
{
this.changeTracker = changeTracker;
this.thumbnailRenderer = thumbnailRenderer;
this.scannedImageRenderer = scannedImageRenderer;
InitializeComponent();
ContrastTransform = new TrueContrastTransform();
@ -66,7 +68,7 @@ namespace NAPS2.WinForms
.Activate();
Size = new Size(600, 600);
workingImage = Image.GetImage();
workingImage = scannedImageRenderer.Render(Image);
pictureBox.Image = (Bitmap)workingImage.Clone();
UpdatePreviewBox();
}

View File

@ -15,16 +15,18 @@ namespace NAPS2.WinForms
{
private readonly ChangeTracker changeTracker;
private readonly ThumbnailRenderer thumbnailRenderer;
private readonly ScannedImageRenderer scannedImageRenderer;
private Bitmap workingImage, workingImage2;
private bool previewOutOfDate;
private bool working;
private Timer previewTimer;
public FCrop(ChangeTracker changeTracker, ThumbnailRenderer thumbnailRenderer)
public FCrop(ChangeTracker changeTracker, ThumbnailRenderer thumbnailRenderer, ScannedImageRenderer scannedImageRenderer)
{
this.changeTracker = changeTracker;
this.thumbnailRenderer = thumbnailRenderer;
this.scannedImageRenderer = scannedImageRenderer;
InitializeComponent();
CropTransform = new CropTransform();
@ -77,8 +79,8 @@ namespace NAPS2.WinForms
.Activate();
Size = new Size(600, 600);
workingImage = Image.GetImage();
workingImage2 = Image.GetImage();
workingImage = scannedImageRenderer.Render(Image);
workingImage2 = scannedImageRenderer.Render(Image);
UpdateCropBounds();
UpdatePreviewBox();
@ -199,7 +201,7 @@ namespace NAPS2.WinForms
if (TransformMultiple)
{
// With multiple images, we need to have the transform scaled in case they're different sizes
using (var referenceBitmap = Image.GetImage())
using (var referenceBitmap = scannedImageRenderer.Render(Image))
{
foreach (var img in ImagesToTransform)
{
@ -220,7 +222,7 @@ namespace NAPS2.WinForms
private CropTransform ScaleCropTransform(ScannedImage img, Bitmap referenceBitmap)
{
using (var bitmap = img.GetImage())
using (var bitmap = scannedImageRenderer.Render(Image))
{
double xScale = bitmap.Width / (double)referenceBitmap.Width,
yScale = bitmap.Height / (double)referenceBitmap.Height;

View File

@ -48,6 +48,7 @@ namespace NAPS2.WinForms
private readonly IUserConfigManager userConfigManager;
private readonly KeyboardShortcutManager ksm;
private readonly WinFormsExportHelper exportHelper;
private readonly ScannedImageRenderer scannedImageRenderer;
#endregion
@ -64,7 +65,7 @@ namespace NAPS2.WinForms
#region Initialization and Culture
public FDesktop(StringWrapper stringWrapper, AppConfigManager appConfigManager, RecoveryManager recoveryManager, OcrDependencyManager ocrDependencyManager, IProfileManager profileManager, IScanPerformer scanPerformer, IScannedImagePrinter scannedImagePrinter, ChangeTracker changeTracker, StillImage stillImage, IOperationFactory operationFactory, IUserConfigManager userConfigManager, KeyboardShortcutManager ksm, ThumbnailRenderer thumbnailRenderer, WinFormsExportHelper exportHelper)
public FDesktop(StringWrapper stringWrapper, AppConfigManager appConfigManager, RecoveryManager recoveryManager, OcrDependencyManager ocrDependencyManager, IProfileManager profileManager, IScanPerformer scanPerformer, IScannedImagePrinter scannedImagePrinter, ChangeTracker changeTracker, StillImage stillImage, IOperationFactory operationFactory, IUserConfigManager userConfigManager, KeyboardShortcutManager ksm, ThumbnailRenderer thumbnailRenderer, WinFormsExportHelper exportHelper, ScannedImageRenderer scannedImageRenderer)
{
this.stringWrapper = stringWrapper;
this.appConfigManager = appConfigManager;
@ -80,6 +81,7 @@ namespace NAPS2.WinForms
this.ksm = ksm;
this.thumbnailRenderer = thumbnailRenderer;
this.exportHelper = exportHelper;
this.scannedImageRenderer = scannedImageRenderer;
InitializeComponent();
Shown += FDesktop_Shown;
@ -1434,7 +1436,7 @@ namespace NAPS2.WinForms
}
}
private static IDataObject GetDataObjectForImages(IEnumerable<ScannedImage> images, bool includeBitmap)
private IDataObject GetDataObjectForImages(IEnumerable<ScannedImage> images, bool includeBitmap)
{
var imageList = images.ToList();
IDataObject ido = new DataObject();
@ -1444,7 +1446,7 @@ namespace NAPS2.WinForms
}
if (includeBitmap)
{
using (var firstBitmap = imageList[0].GetImage())
using (var firstBitmap = scannedImageRenderer.Render(imageList[0]))
{
ido.SetData(DataFormats.Bitmap, true, new Bitmap(firstBitmap));
ido.SetData(DataFormats.Rtf, true, RtfEncodeImages(firstBitmap, imageList));
@ -1454,7 +1456,7 @@ namespace NAPS2.WinForms
return ido;
}
private static string RtfEncodeImages(Bitmap firstBitmap, List<ScannedImage> images)
private string RtfEncodeImages(Bitmap firstBitmap, List<ScannedImage> images)
{
var sb = new StringBuilder();
sb.Append("{");
@ -1464,7 +1466,7 @@ namespace NAPS2.WinForms
}
foreach (var img in images.Skip(1))
{
using (var bitmap = img.GetImage())
using (var bitmap = scannedImageRenderer.Render(img))
{
if (!AppendRtfEncodedImage(bitmap, img.FileFormat, sb, true))
{

View File

@ -16,16 +16,18 @@ namespace NAPS2.WinForms
{
private readonly ChangeTracker changeTracker;
private readonly ThumbnailRenderer thumbnailRenderer;
private readonly ScannedImageRenderer scannedImageRenderer;
private Bitmap workingImage;
private bool previewOutOfDate;
private bool working;
private Timer previewTimer;
public FRotate(ChangeTracker changeTracker, ThumbnailRenderer thumbnailRenderer)
public FRotate(ChangeTracker changeTracker, ThumbnailRenderer thumbnailRenderer, ScannedImageRenderer scannedImageRenderer)
{
this.changeTracker = changeTracker;
this.thumbnailRenderer = thumbnailRenderer;
this.scannedImageRenderer = scannedImageRenderer;
InitializeComponent();
RotationTransform = new RotationTransform();
@ -68,7 +70,7 @@ namespace NAPS2.WinForms
.Activate();
Size = new Size(600, 600);
workingImage = Image.GetImage();
workingImage = scannedImageRenderer.Render(Image);
pictureBox.Image = (Bitmap)workingImage.Clone();
txtAngle.Text += '\u00B0';
UpdatePreviewBox();

View File

@ -42,13 +42,15 @@ namespace NAPS2.WinForms
private readonly IOperationFactory operationFactory;
private readonly WinFormsExportHelper exportHelper;
private readonly AppConfigManager appConfigManager;
private readonly ScannedImageRenderer scannedImageRenderer;
public FViewer(ChangeTracker changeTracker, IOperationFactory operationFactory, WinFormsExportHelper exportHelper, AppConfigManager appConfigManager)
public FViewer(ChangeTracker changeTracker, IOperationFactory operationFactory, WinFormsExportHelper exportHelper, AppConfigManager appConfigManager, ScannedImageRenderer scannedImageRenderer)
{
this.changeTracker = changeTracker;
this.operationFactory = operationFactory;
this.exportHelper = exportHelper;
this.appConfigManager = appConfigManager;
this.scannedImageRenderer = scannedImageRenderer;
InitializeComponent();
}
@ -60,7 +62,7 @@ namespace NAPS2.WinForms
protected override void OnLoad(object sender, EventArgs e)
{
tiffViewer1.Image = ImageList.Images[ImageIndex].GetImage();
tiffViewer1.Image = scannedImageRenderer.Render(ImageList.Images[ImageIndex]);
tbPageCurrent.Text = (ImageIndex + 1).ToString(CultureInfo.InvariantCulture);
lblPageTotal.Text = string.Format(MiscResources.OfN, ImageList.Images.Count);
}
@ -80,7 +82,7 @@ namespace NAPS2.WinForms
private void UpdateImage()
{
tiffViewer1.Image.Dispose();
tiffViewer1.Image = ImageList.Images[ImageIndex].GetImage();
tiffViewer1.Image = scannedImageRenderer.Render(ImageList.Images[ImageIndex]);
}
protected override void Dispose(bool disposing)

View File

@ -17,7 +17,6 @@ namespace NAPS2.DI.EntryPoints
public static void Run(string[] args)
{
var kernel = new StandardKernel(new CommonModule(), new WinFormsModule());
ScannedImage.PdfRenderer = kernel.Get<GhostscriptPdfRenderer>();
var lifecycle = kernel.Get<Lifecycle>();
lifecycle.ParseArgs(args);

View File

@ -32,6 +32,7 @@ namespace NAPS2.DI.Modules
Bind<IScannedImageImporter>().To<ScannedImageImporter>();
Bind<IPdfImporter>().To<PdfSharpImporter>();
Bind<IImageImporter>().To<ImageImporter>();
Bind<IPdfRenderer>().To<GhostscriptPdfRenderer>();
// Export
Bind<IPdfExporter>().To<PdfSharpExporter>();