Browse Source

Define base classes and options

pull/2269/head
James Jackson-South 4 years ago
parent
commit
e238cc60f6
  1. 33
      src/ImageSharp/Formats/IEncoderOptions.cs
  2. 4
      src/ImageSharp/Formats/ImageDecoderUtilities.cs
  3. 37
      src/ImageSharp/Formats/ImageEncoder.cs
  4. 6
      src/ImageSharp/Formats/ImageEncoderUtilities.cs

33
src/ImageSharp/Formats/IEncoderOptions.cs

@ -0,0 +1,33 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
using SixLabors.ImageSharp.Processing.Processors.Quantization;
namespace SixLabors.ImageSharp.Formats;
/// <summary>
/// Defines the contract for basic encoder options.
/// </summary>
public interface IEncoderOptions
{
/// <summary>
/// Gets or sets a value indicating whether to ignore decoded metadata when encoding.
/// </summary>
bool SkipMetadata { get; set; }
}
/// <summary>
/// Defines the contract for encoder options that allow color palette generation via quantization.
/// </summary>
public interface IQuantizingEncoderOptions : IEncoderOptions
{
/// <summary>
/// Gets or sets the quantizer used to generate the color palette.
/// </summary>
IQuantizer Quantizer { get; set; }
/// <summary>
/// Gets or sets the <see cref="IPixelSamplingStrategy"/> used for quantization when building a global color palette.
/// </summary>
IPixelSamplingStrategy GlobalPixelSamplingStrategy { get; set; }
}

4
src/ImageSharp/Formats/ImageDecoderUtilities.cs

@ -58,7 +58,7 @@ internal static class ImageDecoderUtilities
Stream stream,
CancellationToken cancellationToken)
{
using var bufferedReadStream = new BufferedReadStream(configuration, stream);
using BufferedReadStream bufferedReadStream = new(configuration, stream);
try
{
@ -86,7 +86,7 @@ internal static class ImageDecoderUtilities
CancellationToken cancellationToken)
where TPixel : unmanaged, IPixel<TPixel>
{
using var bufferedReadStream = new BufferedReadStream(configuration, stream);
using BufferedReadStream bufferedReadStream = new(configuration, stream);
try
{

37
src/ImageSharp/Formats/ImageEncoder.cs

@ -0,0 +1,37 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Processing;
using SixLabors.ImageSharp.Processing.Processors.Quantization;
namespace SixLabors.ImageSharp.Formats;
/// <summary>
/// The base class for all image encoders.
/// </summary>
public abstract class ImageEncoder : IImageEncoder, IEncoderOptions
{
/// <inheritdoc/>
public bool SkipMetadata { get; set; }
/// <inheritdoc/>
public abstract void Encode<TPixel>(Image<TPixel> image, Stream stream)
where TPixel : unmanaged, IPixel<TPixel>;
/// <inheritdoc/>
public abstract Task EncodeAsync<TPixel>(Image<TPixel> image, Stream stream, CancellationToken cancellationToken)
where TPixel : unmanaged, IPixel<TPixel>;
}
/// <summary>
/// The base class for all image encoders that allow color palette generation via quantization.
/// </summary>
public abstract class QuantizingImageEncoder : ImageEncoder, IQuantizingEncoderOptions
{
/// <inheritdoc/>
public IQuantizer Quantizer { get; set; } = KnownQuantizers.Octree;
/// <inheritdoc/>
public IPixelSamplingStrategy GlobalPixelSamplingStrategy { get; set; } = new DefaultPixelSamplingStrategy();
}

6
src/ImageSharp/Formats/ImageEncoderUtilities.cs

@ -1,4 +1,4 @@
// Copyright (c) Six Labors.
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
using SixLabors.ImageSharp.Advanced;
@ -22,11 +22,11 @@ internal static class ImageEncoderUtilities
}
else
{
using var ms = new MemoryStream();
using MemoryStream ms = new();
await DoEncodeAsync(ms);
ms.Position = 0;
await ms.CopyToAsync(stream, configuration.StreamProcessingBufferSize, cancellationToken)
.ConfigureAwait(false);
.ConfigureAwait(false);
}
Task DoEncodeAsync(Stream innerStream)

Loading…
Cancel
Save