// // Copyright (c) James Jackson-South and contributors. // Licensed under the Apache License, Version 2.0. // namespace SixLabors.ImageSharp.Benchmarks.Image { using System.Collections.Generic; using System.IO; using BenchmarkDotNet.Attributes; using ImageSharp.Formats; using ImageSharp.Formats.Jpeg.GolangPort; using ImageSharp.PixelFormats; using SixLabors.ImageSharp.Formats.Jpeg; using CoreImage = ImageSharp.Image; [Config(typeof(Config.Short))] public class DecodeJpegMultiple : MultiImageBenchmarkBase { protected override IEnumerable InputImageSubfoldersOrFiles => new[] { "Jpg/" }; protected override IEnumerable SearchPatterns => new[] { "*.jpg" }; [Benchmark(Description = "DecodeJpegMultiple - ImageSharp NEW")] public void DecodeJpegImageSharpNwq() { this.ForEachStream( ms => CoreImage.Load(ms) ); } [Benchmark(Description = "DecodeJpegMultiple - ImageSharp Original")] public void DecodeJpegImageSharpOriginal() { this.ForEachStream( ms => CoreImage.Load(ms, new OriginalJpegDecoder()) ); } [Benchmark(Baseline = true, Description = "DecodeJpegMultiple - System.Drawing")] public void DecodeJpegSystemDrawing() { this.ForEachStream( System.Drawing.Image.FromStream ); } public sealed class OriginalJpegDecoder : IImageDecoder, IJpegDecoderOptions { /// /// Gets or sets a value indicating whether the metadata should be ignored when the image is being decoded. /// public bool IgnoreMetadata { get; set; } /// public Image Decode(Configuration configuration, Stream stream) where TPixel : struct, IPixel { Guard.NotNull(stream, "stream"); using (var decoder = new OrigJpegDecoderCore(configuration, this)) { return decoder.Decode(stream); } } } } }