@@ -26,8 +26,11 @@ public class EncodeJpeg
2626
2727 // ImageSharp
2828 private Image < Rgba32 > bmpCore ;
29+ private Image < L8 > bmpLuminance ;
30+ private JpegEncoder encoder400 ;
2931 private JpegEncoder encoder420 ;
3032 private JpegEncoder encoder444 ;
33+ private JpegEncoder encoderRgb ;
3134
3235 private MemoryStream destinationStream ;
3336
@@ -40,8 +43,11 @@ public void ReadImages()
4043
4144 this . bmpCore = Image . Load < Rgba32 > ( this . bmpStream ) ;
4245 this . bmpCore . Metadata . ExifProfile = null ;
46+ this . bmpLuminance = this . bmpCore . CloneAs < L8 > ( ) ;
47+ this . encoder400 = new JpegEncoder { Quality = this . Quality , ColorType = JpegColorType . Luminance } ;
4348 this . encoder420 = new JpegEncoder { Quality = this . Quality , ColorType = JpegColorType . YCbCrRatio420 } ;
4449 this . encoder444 = new JpegEncoder { Quality = this . Quality , ColorType = JpegColorType . YCbCrRatio444 } ;
50+ this . encoderRgb = new JpegEncoder { Quality = this . Quality , ColorType = JpegColorType . Rgb } ;
4551
4652 this . bmpStream . Position = 0 ;
4753 this . bmpDrawing = SDImage . FromStream ( this . bmpStream ) ;
@@ -79,6 +85,14 @@ public void JpegSystemDrawing()
7985 this . destinationStream . Seek ( 0 , SeekOrigin . Begin ) ;
8086 }
8187
88+ [ Benchmark ( Description = "ImageSharp (greyscale) Jpeg 4:0:0" ) ]
89+ public void JpegCore400 ( )
90+ {
91+ this . bmpLuminance . SaveAsJpeg ( this . destinationStream , this . encoder400 ) ;
92+ this . destinationStream . Seek ( 0 , SeekOrigin . Begin ) ;
93+ }
94+
95+
8296 [ Benchmark ( Description = "ImageSharp Jpeg 4:2:0" ) ]
8397 public void JpegCore420 ( )
8498 {
@@ -93,6 +107,13 @@ public void JpegCore444()
93107 this . destinationStream . Seek ( 0 , SeekOrigin . Begin ) ;
94108 }
95109
110+ [ Benchmark ( Description = "ImageSharp Jpeg rgb" ) ]
111+ public void JpegRgb ( )
112+ {
113+ this . bmpCore . SaveAsJpeg ( this . destinationStream , this . encoderRgb ) ;
114+ this . destinationStream . Seek ( 0 , SeekOrigin . Begin ) ;
115+ }
116+
96117 // https://docs.microsoft.com/en-us/dotnet/api/system.drawing.imaging.encoderparameter?redirectedfrom=MSDN&view=net-5.0
97118 private static ImageCodecInfo GetEncoder ( ImageFormat format )
98119 {
@@ -111,24 +132,30 @@ private static ImageCodecInfo GetEncoder(ImageFormat format)
111132}
112133
113134/*
114- BenchmarkDotNet=v0.13.0, OS=Windows 10.0.19042
115- Intel Core i7-6700K CPU 4.00GHz (Skylake), 1 CPU, 8 logical and 4 physical cores
116- .NET SDK=6.0.100-preview.3.21202.5
117- [Host] : .NET Core 3.1.18 (CoreCLR 4.700.21.35901, CoreFX 4.700.21.36305), X64 RyuJIT
118- DefaultJob : .NET Core 3.1.18 (CoreCLR 4.700.21.35901, CoreFX 4.700.21.36305), X64 RyuJIT
119-
120-
121- | Method | Quality | Mean | Error | StdDev | Ratio |
122- |---------------------------- |-------- |---------:|---------:|---------:|------:|
123- | 'System.Drawing Jpeg 4:2:0' | 75 | 30.04 ms | 0.540 ms | 0.479 ms | 1.00 |
124- | 'ImageSharp Jpeg 4:2:0' | 75 | 19.32 ms | 0.290 ms | 0.257 ms | 0.64 |
125- | 'ImageSharp Jpeg 4:4:4' | 75 | 26.76 ms | 0.332 ms | 0.294 ms | 0.89 |
126- | | | | | | |
127- | 'System.Drawing Jpeg 4:2:0' | 90 | 32.82 ms | 0.184 ms | 0.163 ms | 1.00 |
128- | 'ImageSharp Jpeg 4:2:0' | 90 | 25.00 ms | 0.408 ms | 0.361 ms | 0.76 |
129- | 'ImageSharp Jpeg 4:4:4' | 90 | 31.83 ms | 0.636 ms | 0.595 ms | 0.97 |
130- | | | | | | |
131- | 'System.Drawing Jpeg 4:2:0' | 100 | 39.30 ms | 0.359 ms | 0.318 ms | 1.00 |
132- | 'ImageSharp Jpeg 4:2:0' | 100 | 34.49 ms | 0.265 ms | 0.235 ms | 0.88 |
133- | 'ImageSharp Jpeg 4:4:4' | 100 | 56.40 ms | 0.565 ms | 0.501 ms | 1.44 |
135+ BenchmarkDotNet=v0.13.0, OS=linuxmint 20.3
136+ AMD Ryzen 7 5800X, 1 CPU, 16 logical and 8 physical cores
137+ .NET SDK=6.0.200
138+ [Host] : .NET Core 3.1.22 (CoreCLR 4.700.21.56803, CoreFX 4.700.21.57101), X64 RyuJIT
139+ DefaultJob : .NET Core 3.1.22 (CoreCLR 4.700.21.56803, CoreFX 4.700.21.57101), X64 RyuJIT
140+
141+
142+ | Method | Quality | Mean | Error | StdDev | Ratio | RatioSD |
143+ |------------------------------------ |-------- |----------:|----------:|----------:|------:|--------:|
144+ | 'System.Drawing Jpeg 4:2:0' | 75 | 9.157 ms | 0.0138 ms | 0.0123 ms | 1.00 | 0.00 |
145+ | 'ImageSharp (greyscale) Jpeg 4:0:0' | 75 | 12.142 ms | 0.1321 ms | 0.1236 ms | 1.33 | 0.01 |
146+ | 'ImageSharp Jpeg 4:2:0' | 75 | 19.655 ms | 0.1057 ms | 0.0883 ms | 2.15 | 0.01 |
147+ | 'ImageSharp Jpeg 4:4:4' | 75 | 19.157 ms | 0.2852 ms | 0.2668 ms | 2.09 | 0.03 |
148+ | 'ImageSharp Jpeg rgb' | 75 | 26.404 ms | 0.3803 ms | 0.3557 ms | 2.89 | 0.04 |
149+ | | | | | | | |
150+ | 'System.Drawing Jpeg 4:2:0' | 90 | 10.828 ms | 0.0727 ms | 0.0680 ms | 1.00 | 0.00 |
151+ | 'ImageSharp (greyscale) Jpeg 4:0:0' | 90 | 14.918 ms | 0.1089 ms | 0.1019 ms | 1.38 | 0.01 |
152+ | 'ImageSharp Jpeg 4:2:0' | 90 | 23.718 ms | 0.0301 ms | 0.0267 ms | 2.19 | 0.02 |
153+ | 'ImageSharp Jpeg 4:4:4' | 90 | 23.857 ms | 0.2387 ms | 0.2233 ms | 2.20 | 0.03 |
154+ | 'ImageSharp Jpeg rgb' | 90 | 34.700 ms | 0.2207 ms | 0.2064 ms | 3.20 | 0.03 |
155+ | | | | | | | |
156+ | 'System.Drawing Jpeg 4:2:0' | 100 | 13.478 ms | 0.0054 ms | 0.0048 ms | 1.00 | 0.00 |
157+ | 'ImageSharp (greyscale) Jpeg 4:0:0' | 100 | 19.446 ms | 0.0803 ms | 0.0751 ms | 1.44 | 0.01 |
158+ | 'ImageSharp Jpeg 4:2:0' | 100 | 30.339 ms | 0.4578 ms | 0.4282 ms | 2.25 | 0.03 |
159+ | 'ImageSharp Jpeg 4:4:4' | 100 | 39.056 ms | 0.1779 ms | 0.1664 ms | 2.90 | 0.01 |
160+ | 'ImageSharp Jpeg rgb' | 100 | 51.828 ms | 0.3336 ms | 0.3121 ms | 3.85 | 0.02 |
134161*/
0 commit comments