diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoderOptions.cs b/src/ImageSharp/Formats/Bmp/BmpDecoderOptions.cs
index b01d17980..1f5ce08d1 100644
--- a/src/ImageSharp/Formats/Bmp/BmpDecoderOptions.cs
+++ b/src/ImageSharp/Formats/Bmp/BmpDecoderOptions.cs
@@ -12,9 +12,9 @@ namespace SixLabors.ImageSharp.Formats.Bmp
public DecoderOptions GeneralOptions { get; set; } = new();
///
- /// Gets the value indicating how to deal with skipped pixels,
+ /// Gets or sets the value indicating how to deal with skipped pixels,
/// which can occur during decoding run length encoded bitmaps.
///
- public RleSkippedPixelHandling RleSkippedPixelHandling { get; }
+ public RleSkippedPixelHandling RleSkippedPixelHandling { get; set; }
}
}
diff --git a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs
index f9098538b..ff4b97b3c 100644
--- a/src/ImageSharp/Formats/Gif/GifDecoderCore.cs
+++ b/src/ImageSharp/Formats/Gif/GifDecoderCore.cs
@@ -122,7 +122,7 @@ namespace SixLabors.ImageSharp.Formats.Gif
{
if (nextFlag == GifConstants.ImageLabel)
{
- if (previousFrame != null && frameCount++ > this.maxFrames)
+ if (previousFrame != null && ++frameCount == this.maxFrames)
{
break;
}
diff --git a/src/ImageSharp/Formats/ImageDecoder{T}.cs b/src/ImageSharp/Formats/ImageDecoder{T}.cs
index 3a7559579..6f43b053f 100644
--- a/src/ImageSharp/Formats/ImageDecoder{T}.cs
+++ b/src/ImageSharp/Formats/ImageDecoder{T}.cs
@@ -13,7 +13,7 @@ namespace SixLabors.ImageSharp.Formats
///
/// The type of specialized decoder options.
public abstract class ImageDecoder : IImageInfoDetector, IImageDecoder
- where T : ISpecializedDecoderOptions, new()
+ where T : class, ISpecializedDecoderOptions, new()
{
///
public IImageInfo Identify(DecoderOptions options, Stream stream, CancellationToken cancellationToken)
diff --git a/src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs b/src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs
index cec199736..f2e5fc7de 100644
--- a/src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs
+++ b/src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs
@@ -177,7 +177,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
ImageFrame frame = this.DecodeFrame(ifd, cancellationToken);
frames.Add(frame);
- if (frameCount++ > this.maxFrames)
+ if (++frameCount == this.maxFrames)
{
break;
}
diff --git a/src/ImageSharp/Formats/Webp/WebpAnimationDecoder.cs b/src/ImageSharp/Formats/Webp/WebpAnimationDecoder.cs
index e2083efe7..57c01cac7 100644
--- a/src/ImageSharp/Formats/Webp/WebpAnimationDecoder.cs
+++ b/src/ImageSharp/Formats/Webp/WebpAnimationDecoder.cs
@@ -111,7 +111,7 @@ namespace SixLabors.ImageSharp.Formats.Webp
break;
}
- if (stream.Position == stream.Length || frameCount++ > this.maxFrames)
+ if (stream.Position == stream.Length || ++frameCount == this.maxFrames)
{
break;
}
diff --git a/src/ImageSharp/Image.FromBytes.cs b/src/ImageSharp/Image.FromBytes.cs
index 0d7fb27f4..9635ec76e 100644
--- a/src/ImageSharp/Image.FromBytes.cs
+++ b/src/ImageSharp/Image.FromBytes.cs
@@ -52,6 +52,51 @@ namespace SixLabors.ImageSharp
return default;
}
+ ///
+ /// Reads the raw image information from the specified stream without fully decoding it.
+ ///
+ /// The byte span containing encoded image data to read the header from.
+ /// The data is null.
+ /// The data is not readable.
+ ///
+ /// The or null if suitable info detector not found.
+ ///
+ public static IImageInfo Identify(ReadOnlySpan data) => Identify(data, out IImageFormat _);
+
+ ///
+ /// Reads the raw image information from the specified stream without fully decoding it.
+ ///
+ /// The byte array containing encoded image data to read the header from.
+ /// The format type of the decoded image.
+ /// The data is null.
+ /// The data is not readable.
+ ///
+ /// The or null if suitable info detector not found.
+ ///
+ public static IImageInfo Identify(ReadOnlySpan data, out IImageFormat format)
+ => Identify(DecoderOptions.Default, data, out format);
+
+ ///
+ /// Reads the raw image information from the specified span of bytes without fully decoding it.
+ ///
+ /// The general decoder options.
+ /// The byte span containing encoded image data to read the header from.
+ /// The format type of the decoded image.
+ /// The configuration is null.
+ /// The data is null.
+ /// The data is not readable.
+ ///
+ /// The or null if suitable info detector is not found.
+ ///
+ public static unsafe IImageInfo Identify(DecoderOptions options, ReadOnlySpan data, out IImageFormat format)
+ {
+ fixed (byte* ptr = &data.GetPinnableReference())
+ {
+ using var stream = new UnmanagedMemoryStream(ptr, data.Length);
+ return Identify(options, stream, out format);
+ }
+ }
+
///
/// Load a new instance of from the given encoded byte span.
///
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg.cs
index 79daa7df4..1c8977f5e 100644
--- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg.cs
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg.cs
@@ -3,6 +3,7 @@
using System.IO;
using BenchmarkDotNet.Attributes;
+using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.Tests;
@@ -24,7 +25,7 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
private void GenericBechmark()
{
this.preloadedImageStream.Position = 0;
- using Image img = this.decoder.Decode(Configuration.Default, this.preloadedImageStream, default);
+ using Image img = this.decoder.Decode(DecoderOptions.Default, this.preloadedImageStream, default);
}
[GlobalSetup(Target = nameof(JpegBaselineInterleaved444))]
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegParseStreamOnly.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegParseStreamOnly.cs
index 34aa11144..546051772 100644
--- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegParseStreamOnly.cs
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpegParseStreamOnly.cs
@@ -38,8 +38,10 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
{
using var memoryStream = new MemoryStream(this.jpegBytes);
using var bufferedStream = new BufferedReadStream(Configuration.Default, memoryStream);
+ var options = new JpegDecoderOptions();
+ options.GeneralOptions.SkipMetadata = true;
- using var decoder = new JpegDecoderCore(Configuration.Default, new JpegDecoder { IgnoreMetadata = true });
+ using var decoder = new JpegDecoderCore(options);
var spectralConverter = new NoopSpectralConverter();
decoder.ParseStream(bufferedStream, spectralConverter, cancellationToken: default);
}
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs
index 5b3fa68b8..d6d699c0c 100644
--- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_Aggregate.cs
@@ -3,7 +3,6 @@
using System.Collections.Generic;
using BenchmarkDotNet.Attributes;
-using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Tests;
using SDImage = System.Drawing.Image;
@@ -18,22 +17,22 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
[Config(typeof(Config.ShortMultiFramework))]
public class DecodeJpeg_Aggregate : MultiImageBenchmarkBase
{
- protected override IEnumerable InputImageSubfoldersOrFiles =>
- new[]
- {
- TestImages.Jpeg.BenchmarkSuite.Jpeg400_SmallMonochrome,
- TestImages.Jpeg.BenchmarkSuite.Jpeg420Exif_MidSizeYCbCr,
- TestImages.Jpeg.BenchmarkSuite.Lake_Small444YCbCr,
- TestImages.Jpeg.BenchmarkSuite.MissingFF00ProgressiveBedroom159_MidSize420YCbCr,
- TestImages.Jpeg.BenchmarkSuite.ExifGetString750Transform_Huge420YCbCr,
- };
+ protected override IEnumerable InputImageSubfoldersOrFiles
+ => new[]
+ {
+ TestImages.Jpeg.BenchmarkSuite.Jpeg400_SmallMonochrome,
+ TestImages.Jpeg.BenchmarkSuite.Jpeg420Exif_MidSizeYCbCr,
+ TestImages.Jpeg.BenchmarkSuite.Lake_Small444YCbCr,
+ TestImages.Jpeg.BenchmarkSuite.MissingFF00ProgressiveBedroom159_MidSize420YCbCr,
+ TestImages.Jpeg.BenchmarkSuite.ExifGetString750Transform_Huge420YCbCr,
+ };
[Params(InputImageCategory.AllImages)]
public override InputImageCategory InputCategory { get; set; }
[Benchmark]
public void ImageSharp()
- => this.ForEachStream(ms => Image.Load(ms, new JpegDecoder()));
+ => this.ForEachStream(ms => Image.Load(ms));
[Benchmark(Baseline = true)]
public void SystemDrawing()
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs
index 2c0c10997..f704bef28 100644
--- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/DecodeJpeg_ImageSpecific.cs
@@ -3,8 +3,7 @@
using System.IO;
using BenchmarkDotNet.Attributes;
-using SixLabors.ImageSharp.Formats.Jpeg;
-using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Tests;
using SDImage = System.Drawing.Image;
using SDSize = System.Drawing.Size;
@@ -47,25 +46,17 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
[Benchmark(Baseline = true)]
public SDSize SystemDrawing()
{
- using (var memoryStream = new MemoryStream(this.jpegBytes))
- {
- using (var image = SDImage.FromStream(memoryStream))
- {
- return image.Size;
- }
- }
+ using var memoryStream = new MemoryStream(this.jpegBytes);
+ using var image = SDImage.FromStream(memoryStream);
+ return image.Size;
}
[Benchmark]
public Size ImageSharp()
{
- using (var memoryStream = new MemoryStream(this.jpegBytes))
- {
- using (var image = Image.Load(memoryStream, new JpegDecoder { IgnoreMetadata = true }))
- {
- return new Size(image.Width, image.Height);
- }
- }
+ using var memoryStream = new MemoryStream(this.jpegBytes);
+ using var image = Image.Load(new DecoderOptions() { SkipMetadata = true }, memoryStream);
+ return new Size(image.Width, image.Height);
}
/*
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs
index b9f1e72fc..d1e1f0e77 100644
--- a/tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs
+++ b/tests/ImageSharp.Benchmarks/Codecs/Jpeg/IdentifyJpeg.cs
@@ -3,6 +3,7 @@
using System.IO;
using BenchmarkDotNet.Attributes;
+using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.Tests;
@@ -32,7 +33,7 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
{
using var memoryStream = new MemoryStream(this.jpegBytes);
var decoder = new JpegDecoder();
- return decoder.Identify(Configuration.Default, memoryStream, default);
+ return decoder.Identify(DecoderOptions.Default, memoryStream, default);
}
}
}
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Tga/DecodeTga.cs b/tests/ImageSharp.Benchmarks/Codecs/Tga/DecodeTga.cs
index 4a96a2b53..9e60fecac 100644
--- a/tests/ImageSharp.Benchmarks/Codecs/Tga/DecodeTga.cs
+++ b/tests/ImageSharp.Benchmarks/Codecs/Tga/DecodeTga.cs
@@ -7,7 +7,6 @@ using System.Threading;
using BenchmarkDotNet.Attributes;
using ImageMagick;
using Pfim;
-using SixLabors.ImageSharp.Formats.Tga;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Tests;
@@ -18,7 +17,7 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs
{
private string TestImageFullPath => Path.Combine(TestEnvironment.InputImagesDirectoryFullPath, this.TestImage);
- private readonly PfimConfig pfimConfig = new PfimConfig(allocator: new PfimAllocator());
+ private readonly PfimConfig pfimConfig = new(allocator: new PfimAllocator());
private byte[] data;
@@ -40,7 +39,7 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs
[Benchmark(Description = "ImageSharp Tga")]
public int TgaImageSharp()
{
- using var image = Image.Load(this.data, new TgaDecoder());
+ using var image = Image.Load(this.data);
return image.Width;
}
diff --git a/tests/ImageSharp.Benchmarks/Codecs/Webp/DecodeWebp.cs b/tests/ImageSharp.Benchmarks/Codecs/Webp/DecodeWebp.cs
index 55d2a8345..f49310b9c 100644
--- a/tests/ImageSharp.Benchmarks/Codecs/Webp/DecodeWebp.cs
+++ b/tests/ImageSharp.Benchmarks/Codecs/Webp/DecodeWebp.cs
@@ -55,7 +55,7 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs
public int WebpLossy()
{
using var memoryStream = new MemoryStream(this.webpLossyBytes);
- using var image = Image.Load(this.configuration, memoryStream);
+ using var image = Image.Load(memoryStream);
return image.Height;
}
@@ -72,7 +72,7 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs
public int WebpLossless()
{
using var memoryStream = new MemoryStream(this.webpLosslessBytes);
- using var image = Image.Load(this.configuration, memoryStream);
+ using var image = Image.Load(memoryStream);
return image.Height;
}
diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs
index 239e20976..8a5892e02 100644
--- a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs
@@ -4,7 +4,7 @@
using System;
using System.IO;
using Microsoft.DotNet.RemoteExecutor;
-
+using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Bmp;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.Metadata;
@@ -75,11 +75,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
}
string providerDump = BasicSerializer.Serialize(provider);
- RemoteExecutor.Invoke(
- RunTest,
- providerDump,
- "Disco")
- .Dispose();
+ RemoteExecutor.Invoke(RunTest, providerDump, "Disco").Dispose();
}
[Theory]
@@ -98,11 +94,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecodeBitfields(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -111,11 +105,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode_Inverted(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -124,11 +116,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode_1Bit(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider, new SystemDrawingReferenceDecoder());
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider, new SystemDrawingReferenceDecoder());
}
[Theory]
@@ -136,11 +126,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode_4Bit(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -148,11 +136,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode_8Bit(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -160,11 +146,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode_16Bit(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -172,11 +156,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode_32Bit(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -184,11 +166,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode_32BitV4Header_Fast(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -199,11 +179,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
where TPixel : unmanaged, IPixel
{
RleSkippedPixelHandling skippedPixelHandling = TestEnvironment.IsWindows ? RleSkippedPixelHandling.Black : RleSkippedPixelHandling.FirstColorOfPalette;
- using (Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = skippedPixelHandling }))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ BmpDecoderOptions options = new() { RleSkippedPixelHandling = skippedPixelHandling };
+
+ using Image image = provider.GetImage(BmpDecoder, options);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -212,11 +192,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
where TPixel : unmanaged, IPixel
{
RleSkippedPixelHandling skippedPixelHandling = TestEnvironment.IsWindows ? RleSkippedPixelHandling.Black : RleSkippedPixelHandling.FirstColorOfPalette;
- using (Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = skippedPixelHandling }))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ BmpDecoderOptions options = new() { RleSkippedPixelHandling = skippedPixelHandling };
+
+ using Image image = provider.GetImage(BmpDecoder, options);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -227,13 +207,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode_RunLengthEncoded_8Bit_WithDelta_SystemDrawingRefDecoder(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.Black }))
+ BmpDecoderOptions options = new() { RleSkippedPixelHandling = RleSkippedPixelHandling.Black };
+ using Image image = provider.GetImage(BmpDecoder, options);
+ image.DebugSave(provider);
+ if (TestEnvironment.IsWindows)
{
- image.DebugSave(provider);
- if (TestEnvironment.IsWindows)
- {
- image.CompareToOriginal(provider, new SystemDrawingReferenceDecoder());
- }
+ image.CompareToOriginal(provider, new SystemDrawingReferenceDecoder());
}
}
@@ -243,11 +222,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode_RunLengthEncoded_8Bit_WithDelta_MagickRefDecoder(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.FirstColorOfPalette }))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider, new MagickReferenceDecoder());
- }
+ BmpDecoderOptions options = new() { RleSkippedPixelHandling = RleSkippedPixelHandling.FirstColorOfPalette };
+ using Image image = provider.GetImage(BmpDecoder, options);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider, new MagickReferenceDecoder());
}
[Theory]
@@ -263,11 +241,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
provider.LimitAllocatorBufferCapacity().InBytesSqrt(400);
}
- using (Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.FirstColorOfPalette }))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider, new MagickReferenceDecoder());
- }
+ BmpDecoderOptions options = new() { RleSkippedPixelHandling = RleSkippedPixelHandling.FirstColorOfPalette };
+ using Image image = provider.GetImage(BmpDecoder, options);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider, new MagickReferenceDecoder());
}
[Theory]
@@ -285,13 +262,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
provider.LimitAllocatorBufferCapacity().InBytesSqrt(400);
}
- using (Image image = provider.GetImage(new BmpDecoder { RleSkippedPixelHandling = RleSkippedPixelHandling.Black }))
- {
- image.DebugSave(provider);
+ BmpDecoderOptions options = new() { RleSkippedPixelHandling = RleSkippedPixelHandling.Black };
+ using Image image = provider.GetImage(BmpDecoder, options);
+ image.DebugSave(provider);
- // TODO: Neither System.Drawing nor MagickReferenceDecoder decode this file.
- // image.CompareToOriginal(provider);
- }
+ // TODO: Neither System.Drawing nor MagickReferenceDecoder decode this file.
+ // image.CompareToOriginal(provider);
}
[Theory]
@@ -299,13 +275,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecodeAlphaBitfields(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
- // TODO: Neither System.Drawing nor MagickReferenceDecoder decode this file.
- // image.CompareToOriginal(provider);
- }
+ // TODO: Neither System.Drawing nor MagickReferenceDecoder decode this file.
+ // image.CompareToOriginal(provider);
}
[Theory]
@@ -313,11 +287,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecodeBitmap_WithAlphaChannel(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider, new MagickReferenceDecoder());
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider, new MagickReferenceDecoder());
}
[Theory]
@@ -325,17 +297,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecodeBitfields_WithUnusualBitmasks(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
-
- // Choosing large tolerance of 6.1 here, because for some reason with the MagickReferenceDecoder the alpha channel
- // seems to be wrong. This bitmap has an alpha channel of two bits. In many cases this alpha channel has a value of 3,
- // which should be remapped to 255 for RGBA32, but the magick decoder has a value of 191 set.
- // The total difference without the alpha channel is still: 0.0204%
- // Exporting the image as PNG with GIMP yields to the same result as the ImageSharp implementation.
- image.CompareToOriginal(provider, ImageComparer.TolerantPercentage(6.1f), new MagickReferenceDecoder());
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+
+ // Choosing large tolerance of 6.1 here, because for some reason with the MagickReferenceDecoder the alpha channel
+ // seems to be wrong. This bitmap has an alpha channel of two bits. In many cases this alpha channel has a value of 3,
+ // which should be remapped to 255 for RGBA32, but the magick decoder has a value of 191 set.
+ // The total difference without the alpha channel is still: 0.0204%
+ // Exporting the image as PNG with GIMP yields to the same result as the ImageSharp implementation.
+ image.CompareToOriginal(provider, ImageComparer.TolerantPercentage(6.1f), new MagickReferenceDecoder());
}
[Theory]
@@ -344,13 +314,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecodeBmpv2(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
- // Do not validate. Reference files will fail validation.
- image.CompareToOriginal(provider, new MagickReferenceDecoder(false));
- }
+ // Do not validate. Reference files will fail validation.
+ image.CompareToOriginal(provider, new MagickReferenceDecoder(false));
}
[Theory]
@@ -358,11 +326,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecodeBmpv3(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -370,11 +336,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecodeLessThanFullPalette(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider, new MagickReferenceDecoder());
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider, new MagickReferenceDecoder());
}
[Theory]
@@ -383,13 +347,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecodeOversizedPalette(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ if (TestEnvironment.IsWindows)
{
- image.DebugSave(provider);
- if (TestEnvironment.IsWindows)
- {
- image.CompareToOriginal(provider);
- }
+ image.CompareToOriginal(provider);
}
}
@@ -397,39 +359,33 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
[WithFile(InvalidPaletteSize, PixelTypes.Rgba32)]
public void BmpDecoder_ThrowsInvalidImageContentException_OnInvalidPaletteSize(TestImageProvider provider)
where TPixel : unmanaged, IPixel
- {
- Assert.Throws(() =>
+ => Assert.Throws(() =>
{
using (provider.GetImage(BmpDecoder))
{
}
});
- }
[Theory]
[WithFile(Rgb24jpeg, PixelTypes.Rgba32)]
[WithFile(Rgb24png, PixelTypes.Rgba32)]
public void BmpDecoder_ThrowsNotSupportedException_OnUnsupportedBitmaps(TestImageProvider provider)
where TPixel : unmanaged, IPixel
- {
- Assert.Throws(() =>
+ => Assert.Throws(() =>
{
using (provider.GetImage(BmpDecoder))
{
}
});
- }
[Theory]
[WithFile(Rgb32h52AdobeV3, PixelTypes.Rgba32)]
public void BmpDecoder_CanDecodeAdobeBmpv3(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider, new MagickReferenceDecoder());
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider, new MagickReferenceDecoder());
}
[Theory]
@@ -437,11 +393,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecodeAdobeBmpv3_WithAlpha(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider, new MagickReferenceDecoder());
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider, new MagickReferenceDecoder());
}
[Theory]
@@ -449,11 +403,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecodeBmpv4(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -462,11 +414,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecodeBmpv5(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -474,11 +424,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_RespectsFileHeaderOffset(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -486,11 +434,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_IsNotBoundToSinglePixelType(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -498,11 +444,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode4BytePerEntryPalette(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
- image.CompareToOriginal(provider);
- }
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
+ image.CompareToOriginal(provider);
}
[Theory]
@@ -521,12 +465,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void Identify_DetectsCorrectPixelType(string imagePath, int expectedPixelSize)
{
var testFile = TestFile.Create(imagePath);
- using (var stream = new MemoryStream(testFile.Bytes, false))
- {
- IImageInfo imageInfo = Image.Identify(stream);
- Assert.NotNull(imageInfo);
- Assert.Equal(expectedPixelSize, imageInfo.PixelType?.BitsPerPixel);
- }
+ using var stream = new MemoryStream(testFile.Bytes, false);
+ IImageInfo imageInfo = Image.Identify(stream);
+ Assert.NotNull(imageInfo);
+ Assert.Equal(expectedPixelSize, imageInfo.PixelType?.BitsPerPixel);
}
[Theory]
@@ -541,13 +483,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void Identify_DetectsCorrectWidthAndHeight(string imagePath, int expectedWidth, int expectedHeight)
{
var testFile = TestFile.Create(imagePath);
- using (var stream = new MemoryStream(testFile.Bytes, false))
- {
- IImageInfo imageInfo = Image.Identify(stream);
- Assert.NotNull(imageInfo);
- Assert.Equal(expectedWidth, imageInfo.Width);
- Assert.Equal(expectedHeight, imageInfo.Height);
- }
+ using var stream = new MemoryStream(testFile.Bytes, false);
+ IImageInfo imageInfo = Image.Identify(stream);
+ Assert.NotNull(imageInfo);
+ Assert.Equal(expectedWidth, imageInfo.Width);
+ Assert.Equal(expectedHeight, imageInfo.Height);
}
[Theory]
@@ -555,17 +495,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void Decode_VerifyRatio(string imagePath, int xResolution, int yResolution, PixelResolutionUnit resolutionUnit)
{
var testFile = TestFile.Create(imagePath);
- using (var stream = new MemoryStream(testFile.Bytes, false))
- {
- var decoder = new BmpDecoder();
- using (Image image = decoder.Decode(Configuration.Default, stream, default))
- {
- ImageMetadata meta = image.Metadata;
- Assert.Equal(xResolution, meta.HorizontalResolution);
- Assert.Equal(yResolution, meta.VerticalResolution);
- Assert.Equal(resolutionUnit, meta.ResolutionUnits);
- }
- }
+ using var stream = new MemoryStream(testFile.Bytes, false);
+ var decoder = new BmpDecoder();
+ using Image image = decoder.Decode(DecoderOptions.Default, stream, default);
+ ImageMetadata meta = image.Metadata;
+ Assert.Equal(xResolution, meta.HorizontalResolution);
+ Assert.Equal(yResolution, meta.VerticalResolution);
+ Assert.Equal(resolutionUnit, meta.ResolutionUnits);
}
[Theory]
@@ -573,13 +509,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode_Os2v2XShortHeader(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
- // TODO: Neither System.Drawing or MagickReferenceDecoder can correctly decode this file.
- // image.CompareToOriginal(provider);
- }
+ // TODO: Neither System.Drawing or MagickReferenceDecoder can correctly decode this file.
+ // image.CompareToOriginal(provider);
}
[Theory]
@@ -587,15 +521,13 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode_Os2v2Header(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
- // TODO: System.Drawing can not decode this image. MagickReferenceDecoder can decode it,
- // but i think incorrectly. I have loaded the image with GIMP and exported as PNG.
- // The results are the same as the image sharp implementation.
- // image.CompareToOriginal(provider, new MagickReferenceDecoder());
- }
+ // TODO: System.Drawing can not decode this image. MagickReferenceDecoder can decode it,
+ // but i think incorrectly. I have loaded the image with GIMP and exported as PNG.
+ // The results are the same as the image sharp implementation.
+ // image.CompareToOriginal(provider, new MagickReferenceDecoder());
}
[Theory]
@@ -611,13 +543,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void BmpDecoder_CanDecode_Os2BitmapArray(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(BmpDecoder))
- {
- image.DebugSave(provider);
+ using Image image = provider.GetImage(BmpDecoder);
+ image.DebugSave(provider);
- // TODO: Neither System.Drawing or MagickReferenceDecoder can correctly decode this file.
- // image.CompareToOriginal(provider);
- }
+ // TODO: Neither System.Drawing or MagickReferenceDecoder can correctly decode this file.
+ // image.CompareToOriginal(provider);
}
}
}
diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs
index dd59fb279..5dd712c1f 100644
--- a/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpEncoderTests.cs
@@ -53,22 +53,16 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
var options = new BmpEncoder();
var testFile = TestFile.Create(imagePath);
- using (Image input = testFile.CreateRgba32Image())
- {
- using (var memStream = new MemoryStream())
- {
- input.Save(memStream, options);
-
- memStream.Position = 0;
- using (var output = Image.Load(memStream))
- {
- ImageMetadata meta = output.Metadata;
- Assert.Equal(xResolution, meta.HorizontalResolution);
- Assert.Equal(yResolution, meta.VerticalResolution);
- Assert.Equal(resolutionUnit, meta.ResolutionUnits);
- }
- }
- }
+ using Image input = testFile.CreateRgba32Image();
+ using var memStream = new MemoryStream();
+ input.Save(memStream, options);
+
+ memStream.Position = 0;
+ using var output = Image.Load(memStream);
+ ImageMetadata meta = output.Metadata;
+ Assert.Equal(xResolution, meta.HorizontalResolution);
+ Assert.Equal(yResolution, meta.VerticalResolution);
+ Assert.Equal(resolutionUnit, meta.ResolutionUnits);
}
[Theory]
@@ -78,21 +72,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
var options = new BmpEncoder();
var testFile = TestFile.Create(imagePath);
- using (Image input = testFile.CreateRgba32Image())
- {
- using (var memStream = new MemoryStream())
- {
- input.Save(memStream, options);
-
- memStream.Position = 0;
- using (var output = Image.Load(memStream))
- {
- BmpMetadata meta = output.Metadata.GetBmpMetadata();
-
- Assert.Equal(bmpBitsPerPixel, meta.BitsPerPixel);
- }
- }
- }
+ using Image input = testFile.CreateRgba32Image();
+ using var memStream = new MemoryStream();
+ input.Save(memStream, options);
+
+ memStream.Position = 0;
+ using var output = Image.Load(memStream);
+ BmpMetadata meta = output.Metadata.GetBmpMetadata();
+
+ Assert.Equal(bmpBitsPerPixel, meta.BitsPerPixel);
}
[Theory]
@@ -237,28 +225,26 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
return;
}
- using (Image image = provider.GetImage())
+ using Image image = provider.GetImage();
+ var encoder = new BmpEncoder
{
- var encoder = new BmpEncoder
- {
- BitsPerPixel = BmpBitsPerPixel.Pixel8,
- Quantizer = new WuQuantizer()
- };
- string actualOutputFile = provider.Utility.SaveTestOutputFile(image, "bmp", encoder, appendPixelTypeToFileName: false);
-
- // Use the default decoder to test our encoded image. This verifies the content.
- // We do not verify the reference image though as some are invalid.
- IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(actualOutputFile);
- using (var referenceImage = Image.Load(actualOutputFile, referenceDecoder))
- {
- referenceImage.CompareToReferenceOutput(
- ImageComparer.TolerantPercentage(0.01f),
- provider,
- extension: "bmp",
- appendPixelTypeToFileName: false,
- decoder: new MagickReferenceDecoder(false));
- }
- }
+ BitsPerPixel = BmpBitsPerPixel.Pixel8,
+ Quantizer = new WuQuantizer()
+ };
+
+ string actualOutputFile = provider.Utility.SaveTestOutputFile(image, "bmp", encoder, appendPixelTypeToFileName: false);
+
+ // Use the default decoder to test our encoded image. This verifies the content.
+ // We do not verify the reference image though as some are invalid.
+ IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(actualOutputFile);
+ using FileStream stream = File.OpenRead(actualOutputFile);
+ using Image referenceImage = referenceDecoder.Decode(DecoderOptions.Default, stream, default);
+ referenceImage.CompareToReferenceOutput(
+ ImageComparer.TolerantPercentage(0.01f),
+ provider,
+ extension: "bmp",
+ appendPixelTypeToFileName: false,
+ decoder: new MagickReferenceDecoder(false));
}
[Theory]
@@ -271,28 +257,25 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
return;
}
- using (Image image = provider.GetImage())
+ using Image image = provider.GetImage();
+ var encoder = new BmpEncoder
{
- var encoder = new BmpEncoder
- {
- BitsPerPixel = BmpBitsPerPixel.Pixel8,
- Quantizer = new OctreeQuantizer()
- };
- string actualOutputFile = provider.Utility.SaveTestOutputFile(image, "bmp", encoder, appendPixelTypeToFileName: false);
-
- // Use the default decoder to test our encoded image. This verifies the content.
- // We do not verify the reference image though as some are invalid.
- IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(actualOutputFile);
- using (var referenceImage = Image.Load(actualOutputFile, referenceDecoder))
- {
- referenceImage.CompareToReferenceOutput(
- ImageComparer.TolerantPercentage(0.01f),
- provider,
- extension: "bmp",
- appendPixelTypeToFileName: false,
- decoder: new MagickReferenceDecoder(false));
- }
- }
+ BitsPerPixel = BmpBitsPerPixel.Pixel8,
+ Quantizer = new OctreeQuantizer()
+ };
+ string actualOutputFile = provider.Utility.SaveTestOutputFile(image, "bmp", encoder, appendPixelTypeToFileName: false);
+
+ // Use the default decoder to test our encoded image. This verifies the content.
+ // We do not verify the reference image though as some are invalid.
+ IImageDecoder referenceDecoder = TestEnvironment.GetReferenceDecoder(actualOutputFile);
+ using FileStream stream = File.OpenRead(actualOutputFile);
+ using Image referenceImage = referenceDecoder.Decode(DecoderOptions.Default, stream, default);
+ referenceImage.CompareToReferenceOutput(
+ ImageComparer.TolerantPercentage(0.01f),
+ provider,
+ extension: "bmp",
+ appendPixelTypeToFileName: false,
+ decoder: new MagickReferenceDecoder(false));
}
[Theory]
@@ -306,26 +289,20 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
public void Encode_PreservesColorProfile(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image input = provider.GetImage(new BmpDecoder()))
- {
- ImageSharp.Metadata.Profiles.Icc.IccProfile expectedProfile = input.Metadata.IccProfile;
- byte[] expectedProfileBytes = expectedProfile.ToByteArray();
-
- using (var memStream = new MemoryStream())
- {
- input.Save(memStream, new BmpEncoder());
-
- memStream.Position = 0;
- using (var output = Image.Load(memStream))
- {
- ImageSharp.Metadata.Profiles.Icc.IccProfile actualProfile = output.Metadata.IccProfile;
- byte[] actualProfileBytes = actualProfile.ToByteArray();
-
- Assert.NotNull(actualProfile);
- Assert.Equal(expectedProfileBytes, actualProfileBytes);
- }
- }
- }
+ using Image input = provider.GetImage(new BmpDecoder(), new());
+ ImageSharp.Metadata.Profiles.Icc.IccProfile expectedProfile = input.Metadata.IccProfile;
+ byte[] expectedProfileBytes = expectedProfile.ToByteArray();
+
+ using var memStream = new MemoryStream();
+ input.Save(memStream, new BmpEncoder());
+
+ memStream.Position = 0;
+ using var output = Image.Load(memStream);
+ ImageSharp.Metadata.Profiles.Icc.IccProfile actualProfile = output.Metadata.IccProfile;
+ byte[] actualProfileBytes = actualProfile.ToByteArray();
+
+ Assert.NotNull(actualProfile);
+ Assert.Equal(expectedProfileBytes, actualProfileBytes);
}
[Theory]
@@ -346,24 +323,23 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
ImageComparer customComparer = null)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage())
+ using Image image = provider.GetImage();
+
+ // There is no alpha in bmp with less then 32 bits per pixels, so the reference image will be made opaque.
+ if (bitsPerPixel != BmpBitsPerPixel.Pixel32)
{
- // There is no alpha in bmp with less then 32 bits per pixels, so the reference image will be made opaque.
- if (bitsPerPixel != BmpBitsPerPixel.Pixel32)
- {
- image.Mutate(c => c.MakeOpaque());
- }
-
- var encoder = new BmpEncoder
- {
- BitsPerPixel = bitsPerPixel,
- SupportTransparency = supportTransparency,
- Quantizer = quantizer ?? KnownQuantizers.Octree
- };
-
- // Does DebugSave & load reference CompareToReferenceInput():
- image.VerifyEncoder(provider, "bmp", bitsPerPixel, encoder, customComparer);
+ image.Mutate(c => c.MakeOpaque());
}
+
+ var encoder = new BmpEncoder
+ {
+ BitsPerPixel = bitsPerPixel,
+ SupportTransparency = supportTransparency,
+ Quantizer = quantizer ?? KnownQuantizers.Octree
+ };
+
+ // Does DebugSave & load reference CompareToReferenceInput():
+ image.VerifyEncoder(provider, "bmp", bitsPerPixel, encoder, customComparer);
}
}
}
diff --git a/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs b/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs
index e936eef65..d19f4862b 100644
--- a/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs
+++ b/tests/ImageSharp.Tests/Formats/GeneralFormatTests.cs
@@ -45,12 +45,10 @@ namespace SixLabors.ImageSharp.Tests.Formats
public void ResolutionShouldChange(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage())
- {
- image.Metadata.VerticalResolution = 150;
- image.Metadata.HorizontalResolution = 150;
- image.DebugSave(provider);
- }
+ using Image image = provider.GetImage();
+ image.Metadata.VerticalResolution = 150;
+ image.Metadata.HorizontalResolution = 150;
+ image.DebugSave(provider);
}
[Fact]
@@ -60,11 +58,9 @@ namespace SixLabors.ImageSharp.Tests.Formats
foreach (TestFile file in Files)
{
- using (Image image = file.CreateRgba32Image())
- {
- string filename = Path.Combine(path, $"{file.FileNameWithoutExtension}.txt");
- File.WriteAllText(filename, image.ToBase64String(PngFormat.Instance));
- }
+ using Image image = file.CreateRgba32Image();
+ string filename = Path.Combine(path, $"{file.FileNameWithoutExtension}.txt");
+ File.WriteAllText(filename, image.ToBase64String(PngFormat.Instance));
}
}
@@ -75,10 +71,8 @@ namespace SixLabors.ImageSharp.Tests.Formats
foreach (TestFile file in Files)
{
- using (Image image = file.CreateRgba32Image())
- {
- image.Save(Path.Combine(path, file.FileName));
- }
+ using Image image = file.CreateRgba32Image();
+ image.Save(Path.Combine(path, file.FileName));
}
}
@@ -120,42 +114,40 @@ namespace SixLabors.ImageSharp.Tests.Formats
foreach (TestFile file in Files)
{
- using (Image image = file.CreateRgba32Image())
+ using Image image = file.CreateRgba32Image();
+ using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.bmp")))
+ {
+ image.SaveAsBmp(output);
+ }
+
+ using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.jpg")))
+ {
+ image.SaveAsJpeg(output);
+ }
+
+ using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.pbm")))
+ {
+ image.SaveAsPbm(output);
+ }
+
+ using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.png")))
+ {
+ image.SaveAsPng(output);
+ }
+
+ using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.gif")))
+ {
+ image.SaveAsGif(output);
+ }
+
+ using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.tga")))
{
- using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.bmp")))
- {
- image.SaveAsBmp(output);
- }
-
- using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.jpg")))
- {
- image.SaveAsJpeg(output);
- }
-
- using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.pbm")))
- {
- image.SaveAsPbm(output);
- }
-
- using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.png")))
- {
- image.SaveAsPng(output);
- }
-
- using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.gif")))
- {
- image.SaveAsGif(output);
- }
-
- using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.tga")))
- {
- image.SaveAsTga(output);
- }
-
- using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.tiff")))
- {
- image.SaveAsTiff(output);
- }
+ image.SaveAsTga(output);
+ }
+
+ using (FileStream output = File.OpenWrite(Path.Combine(path, $"{file.FileNameWithoutExtension}.tiff")))
+ {
+ image.SaveAsTiff(output);
}
}
}
@@ -176,10 +168,8 @@ namespace SixLabors.ImageSharp.Tests.Formats
serialized = memoryStream.ToArray();
}
- using (var image2 = Image.Load(serialized))
- {
- image2.Save($"{path}{Path.DirectorySeparatorChar}{file.FileName}");
- }
+ using var image2 = Image.Load(serialized);
+ image2.Save($"{path}{Path.DirectorySeparatorChar}{file.FileName}");
}
}
@@ -213,39 +203,33 @@ namespace SixLabors.ImageSharp.Tests.Formats
public void CanIdentifyImageLoadedFromBytes(int width, int height, string extension)
{
- using (var image = Image.LoadPixelData(new Rgba32[width * height], width, height))
- {
- using (var memoryStream = new MemoryStream())
- {
- IImageFormat format = GetFormat(extension);
- image.Save(memoryStream, format);
- memoryStream.Position = 0;
+ using var image = Image.LoadPixelData(new Rgba32[width * height], width, height);
+ using var memoryStream = new MemoryStream();
+ IImageFormat format = GetFormat(extension);
+ image.Save(memoryStream, format);
+ memoryStream.Position = 0;
- IImageInfo imageInfo = Image.Identify(memoryStream);
+ IImageInfo imageInfo = Image.Identify(memoryStream);
- Assert.Equal(imageInfo.Width, width);
- Assert.Equal(imageInfo.Height, height);
- memoryStream.Position = 0;
+ Assert.Equal(imageInfo.Width, width);
+ Assert.Equal(imageInfo.Height, height);
+ memoryStream.Position = 0;
- imageInfo = Image.Identify(memoryStream, out IImageFormat detectedFormat);
+ imageInfo = Image.Identify(memoryStream, out IImageFormat detectedFormat);
- Assert.Equal(format, detectedFormat);
- }
- }
+ Assert.Equal(format, detectedFormat);
}
[Fact]
public void IdentifyReturnsNullWithInvalidStream()
{
- var invalid = new byte[10];
+ byte[] invalid = new byte[10];
- using (var memoryStream = new MemoryStream(invalid))
- {
- IImageInfo imageInfo = Image.Identify(memoryStream, out IImageFormat format);
+ using var memoryStream = new MemoryStream(invalid);
+ IImageInfo imageInfo = Image.Identify(memoryStream, out IImageFormat format);
- Assert.Null(imageInfo);
- Assert.Null(format);
- }
+ Assert.Null(imageInfo);
+ Assert.Null(format);
}
private static IImageFormat GetFormat(string format)
diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs
index 8fbac4a9e..7c0447a98 100644
--- a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs
@@ -4,7 +4,7 @@
using System;
using System.IO;
using Microsoft.DotNet.RemoteExecutor;
-
+using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Gif;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.Metadata;
@@ -35,11 +35,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
public void Decode_VerifyAllFrames(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage())
- {
- image.DebugSaveMultiFrame(provider);
- image.CompareToReferenceOutputMultiFrame(provider, ImageComparer.Exact);
- }
+ using Image image = provider.GetImage();
+ image.DebugSaveMultiFrame(provider);
+ image.CompareToReferenceOutputMultiFrame(provider, ImageComparer.Exact);
}
[Fact]
@@ -51,13 +49,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
fixed (byte* data = testFile.Bytes.AsSpan(0, length))
{
- using (var stream = new UnmanagedMemoryStream(data, length))
- {
- using (Image image = GifDecoder.Decode(Configuration.Default, stream, default))
- {
- Assert.Equal((200, 200), (image.Width, image.Height));
- }
- }
+ using var stream = new UnmanagedMemoryStream(data, length);
+ using Image image = GifDecoder.Decode(DecoderOptions.Default, stream, default);
+ Assert.Equal((200, 200), (image.Width, image.Height));
}
}
@@ -66,11 +60,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
public void GifDecoder_IsNotBoundToSinglePixelType(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage())
- {
- image.DebugSave(provider);
- image.CompareFirstFrameToReferenceOutput(ImageComparer.Exact, provider);
- }
+ using Image image = provider.GetImage();
+ image.DebugSave(provider);
+ image.CompareFirstFrameToReferenceOutput(ImageComparer.Exact, provider);
}
[Theory]
@@ -80,12 +72,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
public void Decode_VerifyRootFrameAndFrameCount(TestImageProvider provider, int expectedFrameCount)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage())
- {
- Assert.Equal(expectedFrameCount, image.Frames.Count);
- image.DebugSave(provider);
- image.CompareFirstFrameToReferenceOutput(ImageComparer.Exact, provider);
- }
+ using Image image = provider.GetImage();
+ Assert.Equal(expectedFrameCount, image.Frames.Count);
+ image.DebugSave(provider);
+ image.CompareFirstFrameToReferenceOutput(ImageComparer.Exact, provider);
}
[Theory]
@@ -93,10 +83,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
public void CanDecodeJustOneFrame(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(new GifDecoder { DecodingMode = FrameDecodingMode.First }))
- {
- Assert.Equal(1, image.Frames.Count);
- }
+ DecoderOptions options = new() { MaxFrames = 1 };
+ using Image image = provider.GetImage(new GifDecoder(), options);
+ Assert.Equal(1, image.Frames.Count);
}
[Theory]
@@ -104,10 +93,8 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
public void CanDecodeAllFrames(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(new GifDecoder { DecodingMode = FrameDecodingMode.All }))
- {
- Assert.True(image.Frames.Count > 1);
- }
+ using Image image = provider.GetImage(new GifDecoder());
+ Assert.True(image.Frames.Count > 1);
}
[Theory]
@@ -118,10 +105,8 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
public void DetectPixelSize(string imagePath, int expectedPixelSize)
{
var testFile = TestFile.Create(imagePath);
- using (var stream = new MemoryStream(testFile.Bytes, false))
- {
- Assert.Equal(expectedPixelSize, Image.Identify(stream)?.PixelType?.BitsPerPixel);
- }
+ using var stream = new MemoryStream(testFile.Bytes, false);
+ Assert.Equal(expectedPixelSize, Image.Identify(stream)?.PixelType?.BitsPerPixel);
}
[Theory]
@@ -146,11 +131,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
public void Decode_WithMaxDimensions_Works(TestImageProvider provider, int expectedWidth, int expectedHeight)
where TPixel : unmanaged, IPixel
{
- using (Image image = provider.GetImage(GifDecoder))
- {
- Assert.Equal(expectedWidth, image.Width);
- Assert.Equal(expectedHeight, image.Height);
- }
+ using Image image = provider.GetImage(GifDecoder);
+ Assert.Equal(expectedWidth, image.Width);
+ Assert.Equal(expectedHeight, image.Height);
}
[Fact]
@@ -190,12 +173,10 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
public void Issue405_BadApplicationExtensionBlockLength(TestImageProvider provider)
where TPixel : unmanaged, IPixel
{
- using (Image