diff --git a/src/ImageSharp/Formats/Tiff/Compression/T4TiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/T4TiffCompression.cs
index ae15a8b614..8c16cde682 100644
--- a/src/ImageSharp/Formats/Tiff/Compression/T4TiffCompression.cs
+++ b/src/ImageSharp/Formats/Tiff/Compression/T4TiffCompression.cs
@@ -16,16 +16,16 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Compression
/// Initializes a new instance of the class.
///
/// The memory allocator.
- public T4TiffCompression(MemoryAllocator allocator)
- : base(allocator)
+ /// The photometric interpretation.
+ public T4TiffCompression(MemoryAllocator allocator, TiffPhotometricInterpretation photometricInterpretation)
+ : base(allocator, photometricInterpretation)
{
}
///
public override void Decompress(Stream stream, int byteCount, Span buffer)
{
- // TODO: handle case when white is not zero.
- bool isWhiteZero = true;
+ bool isWhiteZero = this.PhotometricInterpretation == TiffPhotometricInterpretation.WhiteIsZero;
int whiteValue = isWhiteZero ? 0 : 1;
int blackValue = isWhiteZero ? 1 : 0;
diff --git a/src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompression.cs
index 33330beba4..1a2b814fec 100644
--- a/src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompression.cs
+++ b/src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompression.cs
@@ -14,10 +14,20 @@ namespace SixLabors.ImageSharp.Formats.Tiff
{
private readonly MemoryAllocator allocator;
+ private TiffPhotometricInterpretation photometricInterpretation;
+
public TiffBaseCompression(MemoryAllocator allocator) => this.allocator = allocator;
+ public TiffBaseCompression(MemoryAllocator allocator, TiffPhotometricInterpretation photometricInterpretation)
+ {
+ this.allocator = allocator;
+ this.photometricInterpretation = photometricInterpretation;
+ }
+
protected MemoryAllocator Allocator => this.allocator;
+ protected TiffPhotometricInterpretation PhotometricInterpretation => this.photometricInterpretation;
+
///
/// Decompresses image data into the supplied buffer.
///
diff --git a/src/ImageSharp/Formats/Tiff/Compression/TiffCompressionFactory.cs b/src/ImageSharp/Formats/Tiff/Compression/TiffCompressionFactory.cs
index cedbbe35b0..e15cc451f2 100644
--- a/src/ImageSharp/Formats/Tiff/Compression/TiffCompressionFactory.cs
+++ b/src/ImageSharp/Formats/Tiff/Compression/TiffCompressionFactory.cs
@@ -8,7 +8,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
{
internal static class TiffCompressionFactory
{
- public static TiffBaseCompression Create(TiffCompressionType compressionType, MemoryAllocator allocator)
+ public static TiffBaseCompression Create(TiffCompressionType compressionType, MemoryAllocator allocator, TiffPhotometricInterpretation photometricInterpretation)
{
switch (compressionType)
{
@@ -21,7 +21,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
case TiffCompressionType.Lzw:
return new LzwTiffCompression(allocator);
case TiffCompressionType.T4:
- return new T4TiffCompression(allocator);
+ return new T4TiffCompression(allocator, photometricInterpretation);
default:
throw TiffThrowHelper.NotSupportedCompression(nameof(compressionType));
}
diff --git a/src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs b/src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs
index 7eced53bd1..5c253d4c8f 100644
--- a/src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs
+++ b/src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs
@@ -276,7 +276,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
stripBuffers[stripIndex] = this.memoryAllocator.AllocateManagedByteBuffer(uncompressedStripSize);
}
- TiffBaseCompression decompressor = TiffCompressionFactory.Create(this.CompressionType, this.memoryAllocator);
+ TiffBaseCompression decompressor = TiffCompressionFactory.Create(this.CompressionType, this.memoryAllocator, this.PhotometricInterpretation);
RgbPlanarTiffColor colorDecoder = TiffColorDecoderFactory.CreatePlanar(this.ColorType, this.BitsPerSample, this.ColorMap);
@@ -313,7 +313,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
Buffer2D pixels = frame.PixelBuffer;
- TiffBaseCompression decompressor = TiffCompressionFactory.Create(this.CompressionType, this.memoryAllocator);
+ TiffBaseCompression decompressor = TiffCompressionFactory.Create(this.CompressionType, this.memoryAllocator, this.PhotometricInterpretation);
TiffBaseColorDecoder colorDecoder = TiffColorDecoderFactory.Create(this.ColorType, this.BitsPerSample, this.ColorMap);