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;