From 20726c3d074d54a689ea34452f5907a608dce3fb Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Mon, 15 Feb 2021 13:30:20 +0100 Subject: [PATCH] Clarify some DebugGuard messages and a little cleanup --- .../Compressors/DeflateCompressor.cs | 4 ++++ .../Compression/Compressors/LzwCompressor.cs | 4 ++++ .../Compression/Compressors/NoCompressor.cs | 4 ++++ .../Compressors/PackBitsCompressor.cs | 4 ++++ .../Decompressors/DeflateTiffCompression.cs | 1 + .../Decompressors/LzwTiffCompression.cs | 1 + .../Decompressors/NoneTiffCompression.cs | 1 + .../Decompressors/PackBitsTiffCompression.cs | 1 + .../Decompressors/T4TiffCompression.cs | 1 + .../Tiff/Compression/TiffBaseCompression.cs | 17 +++++++++++++- .../Tiff/Compression/TiffBaseCompressor.cs | 23 +++++++++++++++++++ .../Tiff/Compression/TiffCompressorFactory.cs | 21 ++++++++--------- .../Compression/TiffDecompressorsFactory.cs | 16 ++++++------- .../Formats/Tiff/TiffEncoderCore.cs | 7 ++++-- .../Tiff/Writers/TiffBaseColorWriter.cs | 1 + .../Formats/Tiff/Writers/TiffBiColorWriter.cs | 6 ++--- .../Tiff/Writers/TiffCompositeColorWriter.cs | 3 ++- .../Formats/Tiff/Writers/TiffGrayWriter.cs | 3 ++- .../Formats/Tiff/Writers/TiffPaletteWriter.cs | 3 +++ .../Formats/Tiff/Writers/TiffRgbWriter.cs | 3 ++- 20 files changed, 95 insertions(+), 29 deletions(-) diff --git a/src/ImageSharp/Formats/Tiff/Compression/Compressors/DeflateCompressor.cs b/src/ImageSharp/Formats/Tiff/Compression/Compressors/DeflateCompressor.cs index 64d3b1ea31..46cb63a86e 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Compressors/DeflateCompressor.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Compressors/DeflateCompressor.cs @@ -19,12 +19,15 @@ public DeflateCompressor(Stream output, MemoryAllocator allocator, int width, in : base(output, allocator, width, bitsPerPixel, predictor) => this.compressionLevel = compressionLevel; + /// public override TiffEncoderCompression Method => TiffEncoderCompression.Deflate; + /// public override void Initialize(int rowsPerStrip) { } + /// public override void CompressStrip(Span rows, int height) { this.memoryStream.Seek(0, SeekOrigin.Begin); @@ -52,6 +55,7 @@ public override void CompressStrip(Span rows, int height) #endif } + /// protected override void Dispose(bool disposing) { } diff --git a/src/ImageSharp/Formats/Tiff/Compression/Compressors/LzwCompressor.cs b/src/ImageSharp/Formats/Tiff/Compression/Compressors/LzwCompressor.cs index 84dc95b5f9..d29cf61573 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Compressors/LzwCompressor.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Compressors/LzwCompressor.cs @@ -17,10 +17,13 @@ public LzwCompressor(Stream output, MemoryAllocator allocator, int width, int bi { } + /// public override TiffEncoderCompression Method => TiffEncoderCompression.Lzw; + /// public override void Initialize(int rowsPerStrip) => this.lzwEncoder = new TiffLzwEncoder(this.Allocator); + /// public override void CompressStrip(Span rows, int height) { if (this.Predictor == TiffPredictor.Horizontal) @@ -31,6 +34,7 @@ public override void CompressStrip(Span rows, int height) this.lzwEncoder.Encode(rows, this.Output); } + /// protected override void Dispose(bool disposing) => this.lzwEncoder?.Dispose(); } } diff --git a/src/ImageSharp/Formats/Tiff/Compression/Compressors/NoCompressor.cs b/src/ImageSharp/Formats/Tiff/Compression/Compressors/NoCompressor.cs index 6c6b9ef343..f4a902b46a 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Compressors/NoCompressor.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Compressors/NoCompressor.cs @@ -13,14 +13,18 @@ public NoCompressor(Stream output) { } + /// public override TiffEncoderCompression Method => TiffEncoderCompression.None; + /// public override void Initialize(int rowsPerStrip) { } + /// public override void CompressStrip(Span rows, int height) => this.Output.Write(rows); + /// protected override void Dispose(bool disposing) { } diff --git a/src/ImageSharp/Formats/Tiff/Compression/Compressors/PackBitsCompressor.cs b/src/ImageSharp/Formats/Tiff/Compression/Compressors/PackBitsCompressor.cs index 93c37d25dc..5353b17c3c 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Compressors/PackBitsCompressor.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Compressors/PackBitsCompressor.cs @@ -16,14 +16,17 @@ public PackBitsCompressor(Stream output, MemoryAllocator allocator, int width, i { } + /// public override TiffEncoderCompression Method => TiffEncoderCompression.PackBits; + /// public override void Initialize(int rowsPerStrip) { int additionalBytes = ((this.BytesPerRow + 126) / 127) + 1; this.pixelData = this.Allocator.AllocateManagedByteBuffer(this.BytesPerRow + additionalBytes); } + /// public override void CompressStrip(Span rows, int height) { DebugGuard.IsTrue(rows.Length % height == 0, "Invalid height"); @@ -38,6 +41,7 @@ public override void CompressStrip(Span rows, int height) } } + /// protected override void Dispose(bool disposing) => this.pixelData?.Dispose(); } } diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/DeflateTiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/DeflateTiffCompression.cs index a53d69027d..be63bdad86 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/DeflateTiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/DeflateTiffCompression.cs @@ -54,6 +54,7 @@ protected override void Decompress(BufferedReadStream stream, int byteCount, Spa } } + /// protected override void Dispose(bool disposing) { } diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/LzwTiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/LzwTiffCompression.cs index b85aa3a22b..a14738e44a 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/LzwTiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/LzwTiffCompression.cs @@ -38,6 +38,7 @@ protected override void Decompress(BufferedReadStream stream, int byteCount, Spa } } + /// 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 a30997debf..f041a00e9e 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/NoneTiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/NoneTiffCompression.cs @@ -23,6 +23,7 @@ public NoneTiffCompression() /// protected override void Decompress(BufferedReadStream stream, int byteCount, Span buffer) => _ = stream.Read(buffer, 0, Math.Min(buffer.Length, byteCount)); + /// protected override void Dispose(bool disposing) { } diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/PackBitsTiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/PackBitsTiffCompression.cs index ab67d818d8..c7461a8073 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/PackBitsTiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/PackBitsTiffCompression.cs @@ -88,6 +88,7 @@ private static void ArrayCopyRepeat(byte value, Span destinationArray, int } } + /// protected override void Dispose(bool disposing) => this.compressedDataMemory?.Dispose(); } } diff --git a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs index fe4641fb28..275e3d598d 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs @@ -81,6 +81,7 @@ protected override void Decompress(BufferedReadStream stream, int byteCount, Spa } } + /// protected override void Dispose(bool disposing) { } diff --git a/src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompression.cs b/src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompression.cs index e47b65c991..a403ca0649 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompression.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompression.cs @@ -17,20 +17,35 @@ protected TiffBaseCompression(MemoryAllocator allocator, int width, int bitsPerP this.Width = width; this.BitsPerPixel = bitsPerPixel; this.Predictor = predictor; - this.BytesPerRow = ((width * bitsPerPixel) + 7) / 8; } + /// + /// Gets the image width. + /// public int Width { get; } + /// + /// Gets the bits per pixel. + /// public int BitsPerPixel { get; } + /// + /// Gets the bytes per row. + /// public int BytesPerRow { get; } + /// + /// Gets the predictor to use. Should only be used with deflate or lzw compression. + /// public TiffPredictor Predictor { get; } + /// + /// Gets the memory allocator. + /// protected MemoryAllocator Allocator { get; } + /// public void Dispose() { if (this.isDisposed) diff --git a/src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompressor.cs b/src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompressor.cs index 71190c7c45..6514fbe834 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompressor.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompressor.cs @@ -10,16 +10,39 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression { internal abstract class TiffBaseCompressor : TiffBaseCompression { + /// + /// Initializes a new instance of the class. + /// + /// The output stream to write the compressed image to. + /// The memory allocator. + /// The image width. + /// Bits per pixel. + /// The predictor to use (should only be used with deflate or lzw compression). Defaults to none. protected TiffBaseCompressor(Stream output, MemoryAllocator allocator, int width, int bitsPerPixel, TiffPredictor predictor = TiffPredictor.None) : base(allocator, width, bitsPerPixel, predictor) => this.Output = output; + /// + /// Gets the compression method to use. + /// public abstract TiffEncoderCompression Method { get; } + /// + /// Gets the output stream to write the compressed image to. + /// public Stream Output { get; } + /// + /// Does any initialization required for the compression. + /// + /// The number of rows per strip. public abstract void Initialize(int rowsPerStrip); + /// + /// Compresses a strip of the image. + /// + /// Image rows to compress. + /// Image height. public abstract void CompressStrip(Span rows, int height); } } diff --git a/src/ImageSharp/Formats/Tiff/Compression/TiffCompressorFactory.cs b/src/ImageSharp/Formats/Tiff/Compression/TiffCompressorFactory.cs index c954de2153..eeb14fb749 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/TiffCompressorFactory.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/TiffCompressorFactory.cs @@ -1,11 +1,8 @@ // Copyright (c) Six Labors. // Licensed under the Apache License, Version 2.0. -using System; -using System.Buffers; using System.IO; using SixLabors.ImageSharp.Compression.Zlib; -using SixLabors.ImageSharp.Formats.Experimental.Tiff; using SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Compressors; using SixLabors.ImageSharp.Formats.Experimental.Tiff.Constants; using SixLabors.ImageSharp.Memory; @@ -26,31 +23,31 @@ public static TiffBaseCompressor Create( switch (method) { case TiffEncoderCompression.None: - DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "Values must be equals"); - DebugGuard.IsTrue(predictor == TiffPredictor.None, "Values must be equals"); + DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "No deflate compression level is expected to be set"); + DebugGuard.IsTrue(predictor == TiffPredictor.None, "Predictor should only be used with lzw or deflate compression"); return new NoCompressor(output); case TiffEncoderCompression.PackBits: - DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "Values must be equals"); - DebugGuard.IsTrue(predictor == TiffPredictor.None, "Values must be equals"); + DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "No deflate compression level is expected to be set"); + DebugGuard.IsTrue(predictor == TiffPredictor.None, "Predictor should only be used with lzw or deflate compression"); return new PackBitsCompressor(output, allocator, width, bitsPerPixel); case TiffEncoderCompression.Deflate: return new DeflateCompressor(output, allocator, width, bitsPerPixel, predictor, compressionLevel); case TiffEncoderCompression.Lzw: - DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "Values must be equals"); + DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "No deflate compression level is expected to be set"); return new LzwCompressor(output, allocator, width, bitsPerPixel, predictor); case TiffEncoderCompression.CcittGroup3Fax: - DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "Values must be equals"); - DebugGuard.IsTrue(predictor == TiffPredictor.None, "Values must be equals"); + DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "No deflate compression level is expected to be set"); + DebugGuard.IsTrue(predictor == TiffPredictor.None, "Predictor should only be used with lzw or deflate compression"); return new T4BitCompressor(output, allocator, width, bitsPerPixel, false); case TiffEncoderCompression.ModifiedHuffman: - DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "Values must be equals"); - DebugGuard.IsTrue(predictor == TiffPredictor.None, "Values must be equals"); + DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "No deflate compression level is expected to be set"); + DebugGuard.IsTrue(predictor == TiffPredictor.None, "Predictor should only be used with lzw or deflate compression"); return new T4BitCompressor(output, allocator, width, bitsPerPixel, true); default: diff --git a/src/ImageSharp/Formats/Tiff/Compression/TiffDecompressorsFactory.cs b/src/ImageSharp/Formats/Tiff/Compression/TiffDecompressorsFactory.cs index 50e77f4f14..130205b5b2 100644 --- a/src/ImageSharp/Formats/Tiff/Compression/TiffDecompressorsFactory.cs +++ b/src/ImageSharp/Formats/Tiff/Compression/TiffDecompressorsFactory.cs @@ -21,29 +21,29 @@ public static TiffBaseDecompresor Create( switch (method) { case TiffDecoderCompressionType.None: - DebugGuard.IsTrue(predictor == TiffPredictor.None, "Values must be equals"); - DebugGuard.IsTrue(faxOptions == FaxCompressionOptions.None, "Values must be equals"); + DebugGuard.IsTrue(predictor == TiffPredictor.None, "Predictor should only be used with lzw or deflate compression"); + DebugGuard.IsTrue(faxOptions == FaxCompressionOptions.None, "No fax compression options are expected"); return new NoneTiffCompression(); case TiffDecoderCompressionType.PackBits: - DebugGuard.IsTrue(predictor == TiffPredictor.None, "Values must be equals"); - DebugGuard.IsTrue(faxOptions == FaxCompressionOptions.None, "Values must be equals"); + DebugGuard.IsTrue(predictor == TiffPredictor.None, "Predictor should only be used with lzw or deflate compression"); + DebugGuard.IsTrue(faxOptions == FaxCompressionOptions.None, "No fax compression options are expected"); return new PackBitsTiffCompression(allocator); case TiffDecoderCompressionType.Deflate: - DebugGuard.IsTrue(faxOptions == FaxCompressionOptions.None, "Values must be equals"); + DebugGuard.IsTrue(faxOptions == FaxCompressionOptions.None, "No fax compression options are expected"); return new DeflateTiffCompression(allocator, width, bitsPerPixel, predictor); case TiffDecoderCompressionType.Lzw: - DebugGuard.IsTrue(faxOptions == FaxCompressionOptions.None, "Values must be equals"); + DebugGuard.IsTrue(faxOptions == FaxCompressionOptions.None, "No fax compression options are expected"); return new LzwTiffCompression(allocator, width, bitsPerPixel, predictor); case TiffDecoderCompressionType.T4: - DebugGuard.IsTrue(predictor == TiffPredictor.None, "Values must be equals"); + DebugGuard.IsTrue(predictor == TiffPredictor.None, "Predictor should only be used with lzw or deflate compression"); return new T4TiffCompression(allocator, faxOptions, photometricInterpretation, width); case TiffDecoderCompressionType.HuffmanRle: - DebugGuard.IsTrue(predictor == TiffPredictor.None, "Values must be equals"); + DebugGuard.IsTrue(predictor == TiffPredictor.None, "Predictor should only be used with lzw or deflate compression"); return new ModifiedHuffmanTiffCompression(allocator, photometricInterpretation, width); default: diff --git a/src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs b/src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs index ec9c761aa4..d9997a28d6 100644 --- a/src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs +++ b/src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs @@ -12,7 +12,6 @@ using SixLabors.ImageSharp.Formats.Experimental.Tiff.Constants; using SixLabors.ImageSharp.Formats.Experimental.Tiff.Writers; using SixLabors.ImageSharp.Memory; -using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.Processing; @@ -58,6 +57,9 @@ internal sealed class TiffEncoderCore : IImageEncoderInternals /// private readonly DeflateCompressionLevel compressionLevel; + /// + /// The maximum number of bytes for a strip. + /// private readonly int maxStripBytes; /// @@ -252,7 +254,8 @@ private void SetMode(Image image) this.bitsPerPixel = TiffBitsPerPixel.Pixel1; return; } - else if (this.Mode != TiffEncodingMode.BiColor) + + if (this.Mode != TiffEncodingMode.BiColor) { TiffThrowHelper.ThrowImageFormatException($"The {this.CompressionType} compression and {this.Mode} aren't compatible. Please use {this.CompressionType} only with {TiffEncodingMode.BiColor} or {TiffEncodingMode.Default} mode."); } diff --git a/src/ImageSharp/Formats/Tiff/Writers/TiffBaseColorWriter.cs b/src/ImageSharp/Formats/Tiff/Writers/TiffBaseColorWriter.cs index 7d5d64f160..f61b294364 100644 --- a/src/ImageSharp/Formats/Tiff/Writers/TiffBaseColorWriter.cs +++ b/src/ImageSharp/Formats/Tiff/Writers/TiffBaseColorWriter.cs @@ -63,6 +63,7 @@ public virtual void Write(TiffBaseCompressor compressor, int rowsPerStrip) this.AddStripTags(rowsPerStrip, stripOffsets, stripByteCounts); } + /// public void Dispose() { if (this.isDisposed) diff --git a/src/ImageSharp/Formats/Tiff/Writers/TiffBiColorWriter.cs b/src/ImageSharp/Formats/Tiff/Writers/TiffBiColorWriter.cs index 91cc9ddfcb..ca366f5150 100644 --- a/src/ImageSharp/Formats/Tiff/Writers/TiffBiColorWriter.cs +++ b/src/ImageSharp/Formats/Tiff/Writers/TiffBiColorWriter.cs @@ -49,7 +49,7 @@ protected override void EncodeStrip(int y, int height, TiffBaseCompressor compre if (compressor.Method == TiffEncoderCompression.CcittGroup3Fax || compressor.Method == TiffEncoderCompression.ModifiedHuffman) { - // special case for T4BitCompressor + // Special case for T4BitCompressor. compressor.CompressStrip(pixelAsGraySpan, height); } else @@ -63,7 +63,7 @@ protected override void EncodeStrip(int y, int height, TiffBaseCompressor compre Span rows = this.bitStrip.Slice(0, bytesPerStrip); rows.Clear(); - int xx = 0; + int grayPixelIndex = 0; for (int s = 0; s < height; s++) { int bitIndex = 0; @@ -72,7 +72,7 @@ protected override void EncodeStrip(int y, int height, TiffBaseCompressor compre for (int x = 0; x < this.Image.Width; x++) { int shift = 7 - bitIndex; - if (pixelAsGraySpan[xx++] == 255) + if (pixelAsGraySpan[grayPixelIndex++] == 255) { outputRow[byteIndex] |= (byte)(1 << shift); } diff --git a/src/ImageSharp/Formats/Tiff/Writers/TiffCompositeColorWriter.cs b/src/ImageSharp/Formats/Tiff/Writers/TiffCompositeColorWriter.cs index 1b2bd4ab68..018ac6fa05 100644 --- a/src/ImageSharp/Formats/Tiff/Writers/TiffCompositeColorWriter.cs +++ b/src/ImageSharp/Formats/Tiff/Writers/TiffCompositeColorWriter.cs @@ -16,7 +16,7 @@ internal abstract class TiffCompositeColorWriter : TiffBaseColorWriter image, MemoryAllocator memoryAllocator, Configuration configuration, TiffEncoderEntriesCollector entriesCollector) + protected TiffCompositeColorWriter(ImageFrame image, MemoryAllocator memoryAllocator, Configuration configuration, TiffEncoderEntriesCollector entriesCollector) : base(image, memoryAllocator, configuration, entriesCollector) { } @@ -40,6 +40,7 @@ protected override void EncodeStrip(int y, int height, TiffBaseCompressor compre protected abstract void EncodePixels(Span pixels, Span buffer); + /// protected override void Dispose(bool disposing) => this.rowBuffer?.Dispose(); } } diff --git a/src/ImageSharp/Formats/Tiff/Writers/TiffGrayWriter.cs b/src/ImageSharp/Formats/Tiff/Writers/TiffGrayWriter.cs index f2b06d8720..7e2e4e304e 100644 --- a/src/ImageSharp/Formats/Tiff/Writers/TiffGrayWriter.cs +++ b/src/ImageSharp/Formats/Tiff/Writers/TiffGrayWriter.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. using System; -using System.IO; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; @@ -16,8 +15,10 @@ public TiffGrayWriter(ImageFrame image, MemoryAllocator memoryAllocator, { } + /// public override int BitsPerPixel => 8; + /// protected override void EncodePixels(Span pixels, Span buffer) => PixelOperations.Instance.ToL8Bytes(this.Configuration, pixels, buffer, pixels.Length); } } diff --git a/src/ImageSharp/Formats/Tiff/Writers/TiffPaletteWriter.cs b/src/ImageSharp/Formats/Tiff/Writers/TiffPaletteWriter.cs index 2866637062..dc7dcf5891 100644 --- a/src/ImageSharp/Formats/Tiff/Writers/TiffPaletteWriter.cs +++ b/src/ImageSharp/Formats/Tiff/Writers/TiffPaletteWriter.cs @@ -31,14 +31,17 @@ public TiffPaletteWriter(ImageFrame image, IQuantizer quantizer, MemoryA this.AddTag(this.quantized); } + /// public override int BitsPerPixel => 8; + /// protected override void EncodeStrip(int y, int height, TiffBaseCompressor compressor) { Span pixels = GetStripPixels(((IPixelSource)this.quantized).PixelBuffer, y, height); compressor.CompressStrip(pixels, height); } + /// protected override void Dispose(bool disposing) => this.quantized?.Dispose(); private void AddTag(IndexedImageFrame quantized) diff --git a/src/ImageSharp/Formats/Tiff/Writers/TiffRgbWriter.cs b/src/ImageSharp/Formats/Tiff/Writers/TiffRgbWriter.cs index 174a677279..b32b5ed90a 100644 --- a/src/ImageSharp/Formats/Tiff/Writers/TiffRgbWriter.cs +++ b/src/ImageSharp/Formats/Tiff/Writers/TiffRgbWriter.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. using System; -using System.IO; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.PixelFormats; @@ -16,8 +15,10 @@ public TiffRgbWriter(ImageFrame image, MemoryAllocator memoryAllocator, { } + /// public override int BitsPerPixel => 24; + /// protected override void EncodePixels(Span pixels, Span buffer) => PixelOperations.Instance.ToRgb24Bytes(this.Configuration, pixels, buffer, pixels.Length); } }