Browse Source

Clarify some DebugGuard messages and a little cleanup

pull/1570/head
Brian Popow 5 years ago
parent
commit
20726c3d07
  1. 4
      src/ImageSharp/Formats/Tiff/Compression/Compressors/DeflateCompressor.cs
  2. 4
      src/ImageSharp/Formats/Tiff/Compression/Compressors/LzwCompressor.cs
  3. 4
      src/ImageSharp/Formats/Tiff/Compression/Compressors/NoCompressor.cs
  4. 4
      src/ImageSharp/Formats/Tiff/Compression/Compressors/PackBitsCompressor.cs
  5. 1
      src/ImageSharp/Formats/Tiff/Compression/Decompressors/DeflateTiffCompression.cs
  6. 1
      src/ImageSharp/Formats/Tiff/Compression/Decompressors/LzwTiffCompression.cs
  7. 1
      src/ImageSharp/Formats/Tiff/Compression/Decompressors/NoneTiffCompression.cs
  8. 1
      src/ImageSharp/Formats/Tiff/Compression/Decompressors/PackBitsTiffCompression.cs
  9. 1
      src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs
  10. 17
      src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompression.cs
  11. 23
      src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompressor.cs
  12. 21
      src/ImageSharp/Formats/Tiff/Compression/TiffCompressorFactory.cs
  13. 16
      src/ImageSharp/Formats/Tiff/Compression/TiffDecompressorsFactory.cs
  14. 7
      src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs
  15. 1
      src/ImageSharp/Formats/Tiff/Writers/TiffBaseColorWriter.cs
  16. 6
      src/ImageSharp/Formats/Tiff/Writers/TiffBiColorWriter.cs
  17. 3
      src/ImageSharp/Formats/Tiff/Writers/TiffCompositeColorWriter.cs
  18. 3
      src/ImageSharp/Formats/Tiff/Writers/TiffGrayWriter.cs
  19. 3
      src/ImageSharp/Formats/Tiff/Writers/TiffPaletteWriter.cs
  20. 3
      src/ImageSharp/Formats/Tiff/Writers/TiffRgbWriter.cs

4
src/ImageSharp/Formats/Tiff/Compression/Compressors/DeflateCompressor.cs

@ -19,12 +19,15 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Compressors
: base(output, allocator, width, bitsPerPixel, predictor) : base(output, allocator, width, bitsPerPixel, predictor)
=> this.compressionLevel = compressionLevel; => this.compressionLevel = compressionLevel;
/// <inheritdoc/>
public override TiffEncoderCompression Method => TiffEncoderCompression.Deflate; public override TiffEncoderCompression Method => TiffEncoderCompression.Deflate;
/// <inheritdoc/>
public override void Initialize(int rowsPerStrip) public override void Initialize(int rowsPerStrip)
{ {
} }
/// <inheritdoc/>
public override void CompressStrip(Span<byte> rows, int height) public override void CompressStrip(Span<byte> rows, int height)
{ {
this.memoryStream.Seek(0, SeekOrigin.Begin); this.memoryStream.Seek(0, SeekOrigin.Begin);
@ -52,6 +55,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Compressors
#endif #endif
} }
/// <inheritdoc/>
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
{ {
} }

4
src/ImageSharp/Formats/Tiff/Compression/Compressors/LzwCompressor.cs

@ -17,10 +17,13 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Compressors
{ {
} }
/// <inheritdoc/>
public override TiffEncoderCompression Method => TiffEncoderCompression.Lzw; public override TiffEncoderCompression Method => TiffEncoderCompression.Lzw;
/// <inheritdoc/>
public override void Initialize(int rowsPerStrip) => this.lzwEncoder = new TiffLzwEncoder(this.Allocator); public override void Initialize(int rowsPerStrip) => this.lzwEncoder = new TiffLzwEncoder(this.Allocator);
/// <inheritdoc/>
public override void CompressStrip(Span<byte> rows, int height) public override void CompressStrip(Span<byte> rows, int height)
{ {
if (this.Predictor == TiffPredictor.Horizontal) if (this.Predictor == TiffPredictor.Horizontal)
@ -31,6 +34,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Compressors
this.lzwEncoder.Encode(rows, this.Output); this.lzwEncoder.Encode(rows, this.Output);
} }
/// <inheritdoc/>
protected override void Dispose(bool disposing) => this.lzwEncoder?.Dispose(); protected override void Dispose(bool disposing) => this.lzwEncoder?.Dispose();
} }
} }

4
src/ImageSharp/Formats/Tiff/Compression/Compressors/NoCompressor.cs

@ -13,14 +13,18 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Compressors
{ {
} }
/// <inheritdoc/>
public override TiffEncoderCompression Method => TiffEncoderCompression.None; public override TiffEncoderCompression Method => TiffEncoderCompression.None;
/// <inheritdoc/>
public override void Initialize(int rowsPerStrip) public override void Initialize(int rowsPerStrip)
{ {
} }
/// <inheritdoc/>
public override void CompressStrip(Span<byte> rows, int height) => this.Output.Write(rows); public override void CompressStrip(Span<byte> rows, int height) => this.Output.Write(rows);
/// <inheritdoc/>
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
{ {
} }

4
src/ImageSharp/Formats/Tiff/Compression/Compressors/PackBitsCompressor.cs

@ -16,14 +16,17 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Compressors
{ {
} }
/// <inheritdoc/>
public override TiffEncoderCompression Method => TiffEncoderCompression.PackBits; public override TiffEncoderCompression Method => TiffEncoderCompression.PackBits;
/// <inheritdoc/>
public override void Initialize(int rowsPerStrip) public override void Initialize(int rowsPerStrip)
{ {
int additionalBytes = ((this.BytesPerRow + 126) / 127) + 1; int additionalBytes = ((this.BytesPerRow + 126) / 127) + 1;
this.pixelData = this.Allocator.AllocateManagedByteBuffer(this.BytesPerRow + additionalBytes); this.pixelData = this.Allocator.AllocateManagedByteBuffer(this.BytesPerRow + additionalBytes);
} }
/// <inheritdoc/>
public override void CompressStrip(Span<byte> rows, int height) public override void CompressStrip(Span<byte> rows, int height)
{ {
DebugGuard.IsTrue(rows.Length % height == 0, "Invalid height"); DebugGuard.IsTrue(rows.Length % height == 0, "Invalid height");
@ -38,6 +41,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Compressors
} }
} }
/// <inheritdoc/>
protected override void Dispose(bool disposing) => this.pixelData?.Dispose(); protected override void Dispose(bool disposing) => this.pixelData?.Dispose();
} }
} }

1
src/ImageSharp/Formats/Tiff/Compression/Decompressors/DeflateTiffCompression.cs

@ -54,6 +54,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Decompresso
} }
} }
/// <inheritdoc/>
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
{ {
} }

1
src/ImageSharp/Formats/Tiff/Compression/Decompressors/LzwTiffCompression.cs

@ -38,6 +38,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Decompresso
} }
} }
/// <inheritdoc/>
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
{ {
} }

1
src/ImageSharp/Formats/Tiff/Compression/Decompressors/NoneTiffCompression.cs

@ -23,6 +23,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Decompresso
/// <inheritdoc/> /// <inheritdoc/>
protected override void Decompress(BufferedReadStream stream, int byteCount, Span<byte> buffer) => _ = stream.Read(buffer, 0, Math.Min(buffer.Length, byteCount)); protected override void Decompress(BufferedReadStream stream, int byteCount, Span<byte> buffer) => _ = stream.Read(buffer, 0, Math.Min(buffer.Length, byteCount));
/// <inheritdoc/>
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
{ {
} }

1
src/ImageSharp/Formats/Tiff/Compression/Decompressors/PackBitsTiffCompression.cs

@ -88,6 +88,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Decompresso
} }
} }
/// <inheritdoc/>
protected override void Dispose(bool disposing) => this.compressedDataMemory?.Dispose(); protected override void Dispose(bool disposing) => this.compressedDataMemory?.Dispose();
} }
} }

1
src/ImageSharp/Formats/Tiff/Compression/Decompressors/T4TiffCompression.cs

@ -81,6 +81,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression.Decompresso
} }
} }
/// <inheritdoc/>
protected override void Dispose(bool disposing) protected override void Dispose(bool disposing)
{ {
} }

17
src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompression.cs

@ -17,20 +17,35 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression
this.Width = width; this.Width = width;
this.BitsPerPixel = bitsPerPixel; this.BitsPerPixel = bitsPerPixel;
this.Predictor = predictor; this.Predictor = predictor;
this.BytesPerRow = ((width * bitsPerPixel) + 7) / 8; this.BytesPerRow = ((width * bitsPerPixel) + 7) / 8;
} }
/// <summary>
/// Gets the image width.
/// </summary>
public int Width { get; } public int Width { get; }
/// <summary>
/// Gets the bits per pixel.
/// </summary>
public int BitsPerPixel { get; } public int BitsPerPixel { get; }
/// <summary>
/// Gets the bytes per row.
/// </summary>
public int BytesPerRow { get; } public int BytesPerRow { get; }
/// <summary>
/// Gets the predictor to use. Should only be used with deflate or lzw compression.
/// </summary>
public TiffPredictor Predictor { get; } public TiffPredictor Predictor { get; }
/// <summary>
/// Gets the memory allocator.
/// </summary>
protected MemoryAllocator Allocator { get; } protected MemoryAllocator Allocator { get; }
/// <inheritdoc />
public void Dispose() public void Dispose()
{ {
if (this.isDisposed) if (this.isDisposed)

23
src/ImageSharp/Formats/Tiff/Compression/TiffBaseCompressor.cs

@ -10,16 +10,39 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression
{ {
internal abstract class TiffBaseCompressor : TiffBaseCompression internal abstract class TiffBaseCompressor : TiffBaseCompression
{ {
/// <summary>
/// Initializes a new instance of the <see cref="TiffBaseCompressor"/> class.
/// </summary>
/// <param name="output">The output stream to write the compressed image to.</param>
/// <param name="allocator">The memory allocator.</param>
/// <param name="width">The image width.</param>
/// <param name="bitsPerPixel">Bits per pixel.</param>
/// <param name="predictor">The predictor to use (should only be used with deflate or lzw compression). Defaults to none.</param>
protected TiffBaseCompressor(Stream output, MemoryAllocator allocator, int width, int bitsPerPixel, TiffPredictor predictor = TiffPredictor.None) protected TiffBaseCompressor(Stream output, MemoryAllocator allocator, int width, int bitsPerPixel, TiffPredictor predictor = TiffPredictor.None)
: base(allocator, width, bitsPerPixel, predictor) : base(allocator, width, bitsPerPixel, predictor)
=> this.Output = output; => this.Output = output;
/// <summary>
/// Gets the compression method to use.
/// </summary>
public abstract TiffEncoderCompression Method { get; } public abstract TiffEncoderCompression Method { get; }
/// <summary>
/// Gets the output stream to write the compressed image to.
/// </summary>
public Stream Output { get; } public Stream Output { get; }
/// <summary>
/// Does any initialization required for the compression.
/// </summary>
/// <param name="rowsPerStrip">The number of rows per strip.</param>
public abstract void Initialize(int rowsPerStrip); public abstract void Initialize(int rowsPerStrip);
/// <summary>
/// Compresses a strip of the image.
/// </summary>
/// <param name="rows">Image rows to compress.</param>
/// <param name="height">Image height.</param>
public abstract void CompressStrip(Span<byte> rows, int height); public abstract void CompressStrip(Span<byte> rows, int height);
} }
} }

21
src/ImageSharp/Formats/Tiff/Compression/TiffCompressorFactory.cs

@ -1,11 +1,8 @@
// Copyright (c) Six Labors. // Copyright (c) Six Labors.
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System;
using System.Buffers;
using System.IO; using System.IO;
using SixLabors.ImageSharp.Compression.Zlib; 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.Compression.Compressors;
using SixLabors.ImageSharp.Formats.Experimental.Tiff.Constants; using SixLabors.ImageSharp.Formats.Experimental.Tiff.Constants;
using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Memory;
@ -26,31 +23,31 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression
switch (method) switch (method)
{ {
case TiffEncoderCompression.None: case TiffEncoderCompression.None:
DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "Values must be equals"); DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "No deflate compression level is expected to be set");
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 NoCompressor(output); return new NoCompressor(output);
case TiffEncoderCompression.PackBits: case TiffEncoderCompression.PackBits:
DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "Values must be equals"); DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "No deflate compression level is expected to be set");
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 PackBitsCompressor(output, allocator, width, bitsPerPixel); return new PackBitsCompressor(output, allocator, width, bitsPerPixel);
case TiffEncoderCompression.Deflate: case TiffEncoderCompression.Deflate:
return new DeflateCompressor(output, allocator, width, bitsPerPixel, predictor, compressionLevel); return new DeflateCompressor(output, allocator, width, bitsPerPixel, predictor, compressionLevel);
case TiffEncoderCompression.Lzw: 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); return new LzwCompressor(output, allocator, width, bitsPerPixel, predictor);
case TiffEncoderCompression.CcittGroup3Fax: case TiffEncoderCompression.CcittGroup3Fax:
DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "Values must be equals"); DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "No deflate compression level is expected to be set");
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 T4BitCompressor(output, allocator, width, bitsPerPixel, false); return new T4BitCompressor(output, allocator, width, bitsPerPixel, false);
case TiffEncoderCompression.ModifiedHuffman: case TiffEncoderCompression.ModifiedHuffman:
DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "Values must be equals"); DebugGuard.IsTrue(compressionLevel == DeflateCompressionLevel.DefaultCompression, "No deflate compression level is expected to be set");
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 T4BitCompressor(output, allocator, width, bitsPerPixel, true); return new T4BitCompressor(output, allocator, width, bitsPerPixel, true);
default: default:

16
src/ImageSharp/Formats/Tiff/Compression/TiffDecompressorsFactory.cs

@ -21,29 +21,29 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression
switch (method) switch (method)
{ {
case TiffDecoderCompressionType.None: case TiffDecoderCompressionType.None:
DebugGuard.IsTrue(predictor == TiffPredictor.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, "Values must be equals"); DebugGuard.IsTrue(faxOptions == FaxCompressionOptions.None, "No fax compression options are expected");
return new NoneTiffCompression(); return new NoneTiffCompression();
case TiffDecoderCompressionType.PackBits: case TiffDecoderCompressionType.PackBits:
DebugGuard.IsTrue(predictor == TiffPredictor.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, "Values must be equals"); DebugGuard.IsTrue(faxOptions == FaxCompressionOptions.None, "No fax compression options are expected");
return new PackBitsTiffCompression(allocator); return new PackBitsTiffCompression(allocator);
case TiffDecoderCompressionType.Deflate: 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); return new DeflateTiffCompression(allocator, width, bitsPerPixel, predictor);
case TiffDecoderCompressionType.Lzw: 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); return new LzwTiffCompression(allocator, width, bitsPerPixel, predictor);
case TiffDecoderCompressionType.T4: 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); return new T4TiffCompression(allocator, faxOptions, photometricInterpretation, width);
case TiffDecoderCompressionType.HuffmanRle: 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); return new ModifiedHuffmanTiffCompression(allocator, photometricInterpretation, width);
default: default:

7
src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs

@ -12,7 +12,6 @@ using SixLabors.ImageSharp.Formats.Experimental.Tiff.Compression;
using SixLabors.ImageSharp.Formats.Experimental.Tiff.Constants; using SixLabors.ImageSharp.Formats.Experimental.Tiff.Constants;
using SixLabors.ImageSharp.Formats.Experimental.Tiff.Writers; using SixLabors.ImageSharp.Formats.Experimental.Tiff.Writers;
using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.Metadata;
using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.Metadata.Profiles.Exif;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Processing;
@ -58,6 +57,9 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff
/// </summary> /// </summary>
private readonly DeflateCompressionLevel compressionLevel; private readonly DeflateCompressionLevel compressionLevel;
/// <summary>
/// The maximum number of bytes for a strip.
/// </summary>
private readonly int maxStripBytes; private readonly int maxStripBytes;
/// <summary> /// <summary>
@ -252,7 +254,8 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff
this.bitsPerPixel = TiffBitsPerPixel.Pixel1; this.bitsPerPixel = TiffBitsPerPixel.Pixel1;
return; 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."); TiffThrowHelper.ThrowImageFormatException($"The {this.CompressionType} compression and {this.Mode} aren't compatible. Please use {this.CompressionType} only with {TiffEncodingMode.BiColor} or {TiffEncodingMode.Default} mode.");
} }

1
src/ImageSharp/Formats/Tiff/Writers/TiffBaseColorWriter.cs

@ -63,6 +63,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Writers
this.AddStripTags(rowsPerStrip, stripOffsets, stripByteCounts); this.AddStripTags(rowsPerStrip, stripOffsets, stripByteCounts);
} }
/// <inheritdoc/>
public void Dispose() public void Dispose()
{ {
if (this.isDisposed) if (this.isDisposed)

6
src/ImageSharp/Formats/Tiff/Writers/TiffBiColorWriter.cs

@ -49,7 +49,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Writers
if (compressor.Method == TiffEncoderCompression.CcittGroup3Fax || compressor.Method == TiffEncoderCompression.ModifiedHuffman) if (compressor.Method == TiffEncoderCompression.CcittGroup3Fax || compressor.Method == TiffEncoderCompression.ModifiedHuffman)
{ {
// special case for T4BitCompressor // Special case for T4BitCompressor.
compressor.CompressStrip(pixelAsGraySpan, height); compressor.CompressStrip(pixelAsGraySpan, height);
} }
else else
@ -63,7 +63,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Writers
Span<byte> rows = this.bitStrip.Slice(0, bytesPerStrip); Span<byte> rows = this.bitStrip.Slice(0, bytesPerStrip);
rows.Clear(); rows.Clear();
int xx = 0; int grayPixelIndex = 0;
for (int s = 0; s < height; s++) for (int s = 0; s < height; s++)
{ {
int bitIndex = 0; int bitIndex = 0;
@ -72,7 +72,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Writers
for (int x = 0; x < this.Image.Width; x++) for (int x = 0; x < this.Image.Width; x++)
{ {
int shift = 7 - bitIndex; int shift = 7 - bitIndex;
if (pixelAsGraySpan[xx++] == 255) if (pixelAsGraySpan[grayPixelIndex++] == 255)
{ {
outputRow[byteIndex] |= (byte)(1 << shift); outputRow[byteIndex] |= (byte)(1 << shift);
} }

3
src/ImageSharp/Formats/Tiff/Writers/TiffCompositeColorWriter.cs

@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Writers
{ {
private IManagedByteBuffer rowBuffer; private IManagedByteBuffer rowBuffer;
public TiffCompositeColorWriter(ImageFrame<TPixel> image, MemoryAllocator memoryAllocator, Configuration configuration, TiffEncoderEntriesCollector entriesCollector) protected TiffCompositeColorWriter(ImageFrame<TPixel> image, MemoryAllocator memoryAllocator, Configuration configuration, TiffEncoderEntriesCollector entriesCollector)
: base(image, memoryAllocator, configuration, entriesCollector) : base(image, memoryAllocator, configuration, entriesCollector)
{ {
} }
@ -40,6 +40,7 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Writers
protected abstract void EncodePixels(Span<TPixel> pixels, Span<byte> buffer); protected abstract void EncodePixels(Span<TPixel> pixels, Span<byte> buffer);
/// <inheritdoc />
protected override void Dispose(bool disposing) => this.rowBuffer?.Dispose(); protected override void Dispose(bool disposing) => this.rowBuffer?.Dispose();
} }
} }

3
src/ImageSharp/Formats/Tiff/Writers/TiffGrayWriter.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.IO;
using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
@ -16,8 +15,10 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Writers
{ {
} }
/// <inheritdoc />
public override int BitsPerPixel => 8; public override int BitsPerPixel => 8;
/// <inheritdoc />
protected override void EncodePixels(Span<TPixel> pixels, Span<byte> buffer) => PixelOperations<TPixel>.Instance.ToL8Bytes(this.Configuration, pixels, buffer, pixels.Length); protected override void EncodePixels(Span<TPixel> pixels, Span<byte> buffer) => PixelOperations<TPixel>.Instance.ToL8Bytes(this.Configuration, pixels, buffer, pixels.Length);
} }
} }

3
src/ImageSharp/Formats/Tiff/Writers/TiffPaletteWriter.cs

@ -31,14 +31,17 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Writers
this.AddTag(this.quantized); this.AddTag(this.quantized);
} }
/// <inheritdoc />
public override int BitsPerPixel => 8; public override int BitsPerPixel => 8;
/// <inheritdoc />
protected override void EncodeStrip(int y, int height, TiffBaseCompressor compressor) protected override void EncodeStrip(int y, int height, TiffBaseCompressor compressor)
{ {
Span<byte> pixels = GetStripPixels(((IPixelSource)this.quantized).PixelBuffer, y, height); Span<byte> pixels = GetStripPixels(((IPixelSource)this.quantized).PixelBuffer, y, height);
compressor.CompressStrip(pixels, height); compressor.CompressStrip(pixels, height);
} }
/// <inheritdoc />
protected override void Dispose(bool disposing) => this.quantized?.Dispose(); protected override void Dispose(bool disposing) => this.quantized?.Dispose();
private void AddTag(IndexedImageFrame<TPixel> quantized) private void AddTag(IndexedImageFrame<TPixel> quantized)

3
src/ImageSharp/Formats/Tiff/Writers/TiffRgbWriter.cs

@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. // Licensed under the Apache License, Version 2.0.
using System; using System;
using System.IO;
using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.PixelFormats; using SixLabors.ImageSharp.PixelFormats;
@ -16,8 +15,10 @@ namespace SixLabors.ImageSharp.Formats.Experimental.Tiff.Writers
{ {
} }
/// <inheritdoc />
public override int BitsPerPixel => 24; public override int BitsPerPixel => 24;
/// <inheritdoc />
protected override void EncodePixels(Span<TPixel> pixels, Span<byte> buffer) => PixelOperations<TPixel>.Instance.ToRgb24Bytes(this.Configuration, pixels, buffer, pixels.Length); protected override void EncodePixels(Span<TPixel> pixels, Span<byte> buffer) => PixelOperations<TPixel>.Instance.ToRgb24Bytes(this.Configuration, pixels, buffer, pixels.Length);
} }
} }

Loading…
Cancel
Save