diff --git a/App/Processor/ImageExtractor.cs b/App/Processor/ImageExtractor.cs index 56a9720d..72761b09 100644 --- a/App/Processor/ImageExtractor.cs +++ b/App/Processor/ImageExtractor.cs @@ -164,21 +164,16 @@ internal void ExtractImage(ImageInfo info) { var fileName = GetNewImageFileName(); if (info.ExtName == Constants.FileExtensions.Png || info.ExtName == Constants.FileExtensions.Tif - //|| info.MaskBytes != null ) { SaveBitmap(info, bytes, fileName); } else { SaveImageBytes(info, bytes, fileName); } - if (info.MaskBytes != null) { - using (var m = new FreeImageBitmap( - info.MaskSize.Width, info.MaskSize.Height, - (info.MaskSize.Width + 7) / 8, PixelFormat.Format1bppIndexed, - info.MaskBytes)) { - //var r = bmp.Composite (false, null, m); + if (info.Mask != null) { + using (var m = info.Mask) { m.Palette.CreateGrayscalePalette(); - m.Save(fileName + "[mask]" + Constants.FileExtensions.Tif); + m.Save($"{fileName}[mask]{(info.Mask.PixelFormat == PixelFormat.Format1bppIndexed ? Constants.FileExtensions.Tif : Constants.FileExtensions.Png)}"); } } _totalImageCount++; diff --git a/App/Processor/Imaging/ImageInfo.cs b/App/Processor/Imaging/ImageInfo.cs index 721b3e41..dc99c406 100644 --- a/App/Processor/Imaging/ImageInfo.cs +++ b/App/Processor/Imaging/ImageInfo.cs @@ -26,8 +26,7 @@ internal sealed class ImageInfo public PdfName PaletteColorSpace { get; private set; } public byte[] PaletteBytes { get; private set; } public byte[] ICCProfile { get; private set; } - public Size MaskSize { get; private set; } - public byte[] MaskBytes { get; private set; } + public FreeImageBitmap Mask { get; private set; } public int PaletteEntryCount { get; private set; } public RGBQUAD[] PaletteArray { get; private set; } public PdfImageData InlineImage { get; private set; } @@ -200,9 +199,8 @@ private static byte[] DecodeImage(ImageInfo info, ImageExtracterOptions options) ) { var mi = new ImageInfo(sm); var mask = DecodeImage(mi, new ImageExtracterOptions() { InvertBlackAndWhiteImages = !options.InvertSoftMask }); - if (mask != null && mi.BitsPerComponent == 1) { - info.MaskBytes = mask; - info.MaskSize = new Size(mi.Width, mi.Height); + if (mask != null) { + info.Mask = ImageExtractor.CreateFreeImageBitmap(mi, ref mask, options.VerticalFlipImages, false); } } return decodedBytes;