Browse Source

Use enum for the horizontal predictor method

pull/1553/head
Brian Popow 5 years ago
parent
commit
de6e9ddb44
  1. 2
      src/ImageSharp/Formats/Tiff/Constants/TiffPredictor.cs
  2. 4
      src/ImageSharp/Formats/Tiff/ITiffEncoderOptions.cs
  3. 2
      src/ImageSharp/Formats/Tiff/TiffEncoder.cs
  4. 10
      src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs
  5. 2
      src/ImageSharp/Formats/Tiff/TiffEncoderEntriesCollector.cs
  6. 16
      tests/ImageSharp.Tests/Formats/Tiff/TiffEncoderTests.cs

2
src/ImageSharp/Formats/Tiff/Constants/TiffPredictor.cs

@ -20,6 +20,8 @@ namespace SixLabors.ImageSharp.Formats.Tiff.Constants
/// <summary>
/// Floating point horizontal differencing.
///
/// Note: The Tiff Encoder does not yet support this. If this is chosen, the encoder will fallback to none.
/// </summary>
FloatingPoint = 3
}

4
src/ImageSharp/Formats/Tiff/ITiffEncoderOptions.cs

@ -35,9 +35,9 @@ namespace SixLabors.ImageSharp.Formats.Tiff
TiffEncodingMode Mode { get; }
/// <summary>
/// Gets a value indicating whether to use horizontal prediction. This can improve the compression ratio with deflate or lzw compression.
/// Gets a value indicating which horizontal prediction to use. This can improve the compression ratio with deflate or lzw compression.
/// </summary>
bool UseHorizontalPredictor { get; }
TiffPredictor HorizontalPredictor { get; }
/// <summary>
/// Gets the quantizer for creating a color palette image.

2
src/ImageSharp/Formats/Tiff/TiffEncoder.cs

@ -31,7 +31,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
public TiffEncodingMode Mode { get; set; }
/// <inheritdoc/>
public bool UseHorizontalPredictor { get; set; }
public TiffPredictor HorizontalPredictor { get; set; }
/// <inheritdoc/>
public IQuantizer Quantizer { get; set; }

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

@ -72,7 +72,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
this.Mode = options.Mode;
this.quantizer = options.Quantizer ?? KnownQuantizers.Octree;
this.BitsPerPixel = options.BitsPerPixel;
this.UseHorizontalPredictor = options.UseHorizontalPredictor;
this.HorizontalPredictor = options.HorizontalPredictor;
this.CompressionType = options.Compression;
this.compressionLevel = options.CompressionLevel;
this.maxStripBytes = options.MaxStripBytes;
@ -95,9 +95,9 @@ namespace SixLabors.ImageSharp.Formats.Tiff
internal TiffEncodingMode Mode { get; private set; }
/// <summary>
/// Gets a value indicating whether to use horizontal prediction. This can improve the compression ratio with deflate compression.
/// Gets a value indicating which horizontal predictor to use. This can improve the compression ratio with deflate compression.
/// </summary>
internal bool UseHorizontalPredictor { get; }
internal TiffPredictor HorizontalPredictor { get; }
/// <summary>
/// Gets the bits per pixel.
@ -164,7 +164,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
var entriesCollector = new TiffEncoderEntriesCollector();
// Write the image bytes to the steam.
var imageDataStart = (uint)writer.Position;
uint imageDataStart = (uint)writer.Position;
TiffBitsPerPixel? tiffBitsPerPixel = this.BitsPerPixel;
if (tiffBitsPerPixel != null)
@ -176,7 +176,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
image.Width,
(int)tiffBitsPerPixel,
this.compressionLevel,
this.UseHorizontalPredictor ? TiffPredictor.Horizontal : TiffPredictor.None);
this.HorizontalPredictor != TiffPredictor.FloatingPoint ? this.HorizontalPredictor : TiffPredictor.None);
using TiffBaseColorWriter<TPixel> colorWriter = TiffColorWriterFactory.Create(
this.Mode,

2
src/ImageSharp/Formats/Tiff/TiffEncoderEntriesCollector.cs

@ -264,7 +264,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
this.collector.AddOrReplace(compression);
this.collector.AddOrReplace(photometricInterpretation);
if (encoder.UseHorizontalPredictor)
if (encoder.HorizontalPredictor == TiffPredictor.Horizontal)
{
if (encoder.Mode == TiffEncodingMode.Rgb || encoder.Mode == TiffEncodingMode.Gray || encoder.Mode == TiffEncodingMode.ColorPalette)
{

16
tests/ImageSharp.Tests/Formats/Tiff/TiffEncoderTests.cs

@ -194,7 +194,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
[Theory]
[WithFile(Calliphora_RgbUncompressed, PixelTypes.Rgba32)]
public void TiffEncoder_EncodeRgb_WithDeflateCompressionAndPredictor_Works<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> => TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit24, TiffEncodingMode.Rgb, TiffCompression.Deflate, usePredictor: true);
where TPixel : unmanaged, IPixel<TPixel> => TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit24, TiffEncodingMode.Rgb, TiffCompression.Deflate, TiffPredictor.Horizontal);
[Theory]
[WithFile(Calliphora_RgbUncompressed, PixelTypes.Rgba32)]
@ -204,7 +204,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
[Theory]
[WithFile(Calliphora_RgbUncompressed, PixelTypes.Rgba32)]
public void TiffEncoder_EncodeRgb_WithLzwCompressionAndPredictor_Works<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> => TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit24, TiffEncodingMode.Rgb, TiffCompression.Lzw, usePredictor: true);
where TPixel : unmanaged, IPixel<TPixel> => TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit24, TiffEncodingMode.Rgb, TiffCompression.Lzw, TiffPredictor.Horizontal);
[Theory]
[WithFile(Calliphora_RgbUncompressed, PixelTypes.Rgba32)]
@ -224,7 +224,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
[Theory]
[WithFile(Calliphora_GrayscaleUncompressed, PixelTypes.Rgba32)]
public void TiffEncoder_EncodeGray_WithDeflateCompressionAndPredictor_Works<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> => TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit8, TiffEncodingMode.Gray, TiffCompression.Deflate, usePredictor: true);
where TPixel : unmanaged, IPixel<TPixel> => TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit8, TiffEncodingMode.Gray, TiffCompression.Deflate, TiffPredictor.Horizontal);
[Theory]
[WithFile(Calliphora_GrayscaleUncompressed, PixelTypes.Rgba32)]
@ -234,7 +234,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
[Theory]
[WithFile(Calliphora_GrayscaleUncompressed, PixelTypes.Rgba32)]
public void TiffEncoder_EncodeGray_WithLzwCompressionAndPredictor_Works<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> => TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit8, TiffEncodingMode.Gray, TiffCompression.Lzw, usePredictor: true);
where TPixel : unmanaged, IPixel<TPixel> => TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit8, TiffEncodingMode.Gray, TiffCompression.Lzw, TiffPredictor.Horizontal);
[Theory]
[WithFile(Calliphora_GrayscaleUncompressed, PixelTypes.Rgba32)]
@ -269,7 +269,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
[WithFile(Calliphora_PaletteUncompressed, PixelTypes.Rgba32)]
public void TiffEncoder_EncodeColorPalette_WithDeflateCompressionAndPredictor_Works<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> =>
TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit8, TiffEncodingMode.ColorPalette, TiffCompression.Deflate, usePredictor: true, useExactComparer: false, compareTolerance: 0.001f);
TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit8, TiffEncodingMode.ColorPalette, TiffCompression.Deflate, TiffPredictor.Horizontal, useExactComparer: false, compareTolerance: 0.001f);
[Theory]
[WithFile(Calliphora_PaletteUncompressed, PixelTypes.Rgba32)]
@ -281,7 +281,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
[WithFile(Calliphora_PaletteUncompressed, PixelTypes.Rgba32)]
public void TiffEncoder_EncodeColorPalette_WithLzwCompressionAndPredictor_Works<TPixel>(TestImageProvider<TPixel> provider)
where TPixel : unmanaged, IPixel<TPixel> =>
TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit8, TiffEncodingMode.ColorPalette, TiffCompression.Lzw, usePredictor: true, useExactComparer: false, compareTolerance: 0.001f);
TestTiffEncoderCore(provider, TiffBitsPerPixel.Bit8, TiffEncodingMode.ColorPalette, TiffCompression.Lzw, TiffPredictor.Horizontal, useExactComparer: false, compareTolerance: 0.001f);
[Theory]
[WithFile(Calliphora_BiColorUncompressed, PixelTypes.Rgba32)]
@ -379,7 +379,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
TiffBitsPerPixel bitsPerPixel,
TiffEncodingMode mode,
TiffCompression compression = TiffCompression.None,
bool usePredictor = false,
TiffPredictor predictor = TiffPredictor.None,
bool useExactComparer = true,
int maxStripSize = 0,
float compareTolerance = 0.01f)
@ -391,7 +391,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
Mode = mode,
BitsPerPixel = bitsPerPixel,
Compression = compression,
UseHorizontalPredictor = usePredictor,
HorizontalPredictor = predictor,
MaxStripBytes = maxStripSize
};

Loading…
Cancel
Save