From 31fa1eac3512cf1dbf050f253696509b9d759cc3 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Tue, 24 Aug 2021 12:11:46 +0200 Subject: [PATCH] Review changes --- .../Decompressors/CcittReferenceScanline.cs | 4 +- .../CcittTwoDimensionalCodeType.cs | 41 +++++++++++++++++++ .../Decompressors/DeflateTiffCompression.cs | 2 +- .../Decompressors/LzwTiffCompression.cs | 2 +- .../Decompressors/ModifiedHuffmanBitReader.cs | 2 +- .../ModifiedHuffmanTiffCompression.cs | 15 ++++++- .../Decompressors/NoneTiffCompression.cs | 2 +- .../Decompressors/PackBitsTiffCompression.cs | 2 +- .../Compression/Decompressors/T4BitReader.cs | 2 +- .../Decompressors/T4TiffCompression.cs | 4 +- .../Compression/Decompressors/T6BitReader.cs | 2 +- .../Decompressors/T6TiffCompression.cs | 2 +- 12 files changed, 66 insertions(+), 14 deletions(-) diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/CcittReferenceScanline.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/CcittReferenceScanline.cs index 64da694021..0aec2361c3 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/CcittReferenceScanline.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/CcittReferenceScanline.cs @@ -48,7 +48,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// Position of b1. public int FindB1(int a0, byte a0Byte) { - if (this.scanLine.IsEmpty) + if (this.IsEmpty) { return this.FindB1ForImaginaryWhiteLine(a0, a0Byte); } @@ -63,7 +63,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// Position of b1. public int FindB2(int b1) { - if (this.scanLine.IsEmpty) + if (this.IsEmpty) { return this.FindB2ForImaginaryWhiteLine(); } diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/CcittTwoDimensionalCodeType.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/CcittTwoDimensionalCodeType.cs index 0bd04b4cde..6d5427d638 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/CcittTwoDimensionalCodeType.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/CcittTwoDimensionalCodeType.cs @@ -3,30 +3,71 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors { + /// + /// Enum for the different two dimensional code words for the ccitt fax compression. + /// internal enum CcittTwoDimensionalCodeType { + /// + /// No valid code word was read. + /// None = 0, + /// + /// Pass mode: This mode is identified when the position of b2 lies to the left of a1. + /// Pass = 1, + /// + /// Indicates horizontal mode. + /// Horizontal = 2, + /// + /// Vertical 0 code word: relative distance between a1 and b1 is 0. + /// Vertical0 = 3, + /// + /// Vertical r1 code word: relative distance between a1 and b1 is 1, a1 is to the right of b1. + /// VerticalR1 = 4, + /// + /// Vertical r2 code word: relative distance between a1 and b1 is 2, a1 is to the right of b1. + /// VerticalR2 = 5, + /// + /// Vertical r3 code word: relative distance between a1 and b1 is 3, a1 is to the right of b1. + /// VerticalR3 = 6, + /// + /// Vertical l1 code word: relative distance between a1 and b1 is 1, a1 is to the left of b1. + /// VerticalL1 = 7, + /// + /// Vertical l2 code word: relative distance between a1 and b1 is 2, a1 is to the left of b1. + /// VerticalL2 = 8, + /// + /// Vertical l3 code word: relative distance between a1 and b1 is 3, a1 is to the left of b1. + /// VerticalL3 = 9, + /// + /// 1d extensions code word, extension code is used to indicate the change from the current mode to another mode, e.g., another coding scheme. + /// Not supported. + /// Extensions1D = 10, + /// + /// 2d extensions code word, extension code is used to indicate the change from the current mode to another mode, e.g., another coding scheme. + /// Not supported. + /// Extensions2D = 11, } } diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/DeflateTiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/DeflateTiffCompression.cs index 917f83585f..4c85116003 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/DeflateTiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/DeflateTiffCompression.cs @@ -18,7 +18,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// /// Note that the 'OldDeflate' compression type is identical to the 'Deflate' compression type. /// - internal class DeflateTiffCompression : TiffBaseDecompressor + internal sealed class DeflateTiffCompression : TiffBaseDecompressor { private readonly bool isBigEndian; diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/LzwTiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/LzwTiffCompression.cs index 77d7b765b7..b5bf7370e7 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/LzwTiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/LzwTiffCompression.cs @@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// /// Class to handle cases where TIFF image data is compressed using LZW compression. /// - internal class LzwTiffCompression : TiffBaseDecompressor + internal sealed class LzwTiffCompression : TiffBaseDecompressor { private readonly bool isBigEndian; diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanBitReader.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanBitReader.cs index 40f6dae9bb..89cdf7ea2b 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanBitReader.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanBitReader.cs @@ -11,7 +11,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// Bit reader for data encoded with the modified huffman rle method. /// See TIFF 6.0 specification, section 10. /// - internal class ModifiedHuffmanBitReader : T4BitReader + internal sealed class ModifiedHuffmanBitReader : T4BitReader { /// /// Initializes a new instance of the class. diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanTiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanTiffCompression.cs index 65feaa427a..06911f7f72 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanTiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/ModifiedHuffmanTiffCompression.cs @@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// /// Class to handle cases where TIFF image data is compressed using Modified Huffman Compression. /// - internal class ModifiedHuffmanTiffCompression : T4TiffCompression + internal sealed class ModifiedHuffmanTiffCompression : TiffBaseDecompressor { private readonly byte whiteValue; @@ -27,13 +27,19 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// The number of bits per pixel. /// The photometric interpretation. public ModifiedHuffmanTiffCompression(MemoryAllocator allocator, TiffFillOrder fillOrder, int width, int bitsPerPixel, TiffPhotometricInterpretation photometricInterpretation) - : base(allocator, fillOrder, width, bitsPerPixel, FaxCompressionOptions.None, photometricInterpretation) + : base(allocator, width, bitsPerPixel) { + this.FillOrder = fillOrder; bool isWhiteZero = photometricInterpretation == TiffPhotometricInterpretation.WhiteIsZero; this.whiteValue = (byte)(isWhiteZero ? 0 : 1); this.blackValue = (byte)(isWhiteZero ? 1 : 0); } + /// + /// Gets the logical order of bits within a byte. + /// + private TiffFillOrder FillOrder { get; } + /// protected override void Decompress(BufferedReadStream stream, int byteCount, int stripHeight, Span buffer) { @@ -81,5 +87,10 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors } } } + + /// + protected override void Dispose(bool disposing) + { + } } } diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/NoneTiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/NoneTiffCompression.cs index c4a9524306..2f49247e16 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/NoneTiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/NoneTiffCompression.cs @@ -11,7 +11,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// /// Class to handle cases where TIFF image data is not compressed. /// - internal class NoneTiffCompression : TiffBaseDecompressor + internal sealed class NoneTiffCompression : TiffBaseDecompressor { /// /// Initializes a new instance of the class. diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/PackBitsTiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/PackBitsTiffCompression.cs index 8a001f5714..bd014ef446 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/PackBitsTiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/PackBitsTiffCompression.cs @@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// /// Class to handle cases where TIFF image data is compressed using PackBits compression. /// - internal class PackBitsTiffCompression : TiffBaseDecompressor + internal sealed class PackBitsTiffCompression : TiffBaseDecompressor { private IMemoryOwner compressedDataMemory; diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4BitReader.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4BitReader.cs index 5e83abf8f6..9925d5a194 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4BitReader.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4BitReader.cs @@ -438,7 +438,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// The value read. protected uint ReadValue(int nBits) { - Guard.MustBeGreaterThan(nBits, 0, nameof(nBits)); + DebugGuard.MustBeGreaterThan(nBits, 0, nameof(nBits)); uint v = 0; int shift = nBits; diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs index e424d52904..df822326b5 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs @@ -12,7 +12,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// /// Class to handle cases where TIFF image data is compressed using CCITT T4 compression. /// - internal class T4TiffCompression : TiffBaseDecompressor + internal sealed class T4TiffCompression : TiffBaseDecompressor { private readonly FaxCompressionOptions faxCompressionOptions; @@ -51,7 +51,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// /// Gets the logical order of bits within a byte. /// - protected TiffFillOrder FillOrder { get; } + private TiffFillOrder FillOrder { get; } /// protected override void Decompress(BufferedReadStream stream, int byteCount, int stripHeight, Span buffer) diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6BitReader.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6BitReader.cs index 05bbd26ab7..bae3aa4221 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6BitReader.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6BitReader.cs @@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// Bit reader for reading CCITT T6 compressed fax data. /// See: Facsimile Coding Schemes and Coding Control Functions for Group 4 Facsimile Apparatus, itu-t recommendation t.6 /// - internal class T6BitReader : T4BitReader + internal sealed class T6BitReader : T4BitReader { private readonly int maxCodeLength = 12; diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6TiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6TiffCompression.cs index 255e861b34..9e0495465c 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6TiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T6TiffCompression.cs @@ -11,7 +11,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression.Decompressors /// /// Class to handle cases where TIFF image data is compressed using CCITT T6 compression. /// - internal class T6TiffCompression : TiffBaseDecompressor + internal sealed class T6TiffCompression : TiffBaseDecompressor { private readonly bool isWhiteZero;