Browse Source

Added quality params to the jpeg encoder benchmark

pull/1632/head
Dmitry Pentin 5 years ago
parent
commit
5ed7e2d1b7
  1. 9
      tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpeg.cs

9
tests/ImageSharp.Benchmarks/Codecs/Jpeg/EncodeJpeg.cs

@ -13,9 +13,10 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
{ {
public class EncodeJpeg public class EncodeJpeg
{ {
[Params(50, 75, 95, 100)]
public int Quality;
private const string TestImage = TestImages.Jpeg.BenchmarkSuite.Jpeg420Exif_MidSizeYCbCr; private const string TestImage = TestImages.Jpeg.BenchmarkSuite.Jpeg420Exif_MidSizeYCbCr;
// GDI+ most likely uses 75 as default quality - https://stackoverflow.com/questions/3957477/what-quality-level-does-image-save-use-for-jpeg-files
private const int EncodingQuality = 75;
// GDI+ uses 4:2:0 subsampling // GDI+ uses 4:2:0 subsampling
private const JpegSubsample EncodingSubsampling = JpegSubsample.Ratio420; private const JpegSubsample EncodingSubsampling = JpegSubsample.Ratio420;
@ -41,14 +42,14 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs.Jpeg
this.bmpCore = Image.Load<Rgba32>(this.bmpStream); this.bmpCore = Image.Load<Rgba32>(this.bmpStream);
this.bmpCore.Metadata.ExifProfile = null; this.bmpCore.Metadata.ExifProfile = null;
this.encoder = new JpegEncoder { Quality = EncodingQuality, Subsample = EncodingSubsampling }; this.encoder = new JpegEncoder { Quality = Quality, Subsample = EncodingSubsampling };
this.bmpStream.Position = 0; this.bmpStream.Position = 0;
this.bmpDrawing = SDImage.FromStream(this.bmpStream); this.bmpDrawing = SDImage.FromStream(this.bmpStream);
this.jpegCodec = GetEncoder(ImageFormat.Jpeg); this.jpegCodec = GetEncoder(ImageFormat.Jpeg);
this.encoderParameters = new EncoderParameters(1); this.encoderParameters = new EncoderParameters(1);
// Quality cast to long is necessary // Quality cast to long is necessary
this.encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, (long)EncodingQuality); this.encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, (long)Quality);
this.destinationStream = new MemoryStream(); this.destinationStream = new MemoryStream();
} }

Loading…
Cancel
Save