From 6885d97c8834f3cf29b89380a5cd4cc3d05a9d79 Mon Sep 17 00:00:00 2001 From: Kunal Pathak Date: Tue, 9 Nov 2021 19:59:36 -0800 Subject: [PATCH] hoist some calculations out --- .../Quantization/WuQuantizer{TPixel}.cs | 26 +++++++++++++++++++ .../Codecs/EncodeIndexedPng.cs | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs index bf4a5ca41e..9b82631632 100644 --- a/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs +++ b/src/ImageSharp/Processing/Processors/Quantization/WuQuantizer{TPixel}.cs @@ -418,18 +418,44 @@ namespace SixLabors.ImageSharp.Processing.Processors.Quantization for (int r = 1; r < IndexCount; r++) { volumeSpan.Clear(); +#if ALTERNATE + int ind1_r = (r << ((IndexBits * 2) + IndexAlphaBits)) + + (r << (IndexBits + IndexAlphaBits + 1)) + + (r << (IndexBits * 2)) + + (r << (IndexBits + 1)) + + r; +#endif for (int g = 1; g < IndexCount; g++) { areaSpan.Clear(); +#if ALTERNATE + int ind1_g = ind1_r + + (g << (IndexBits + IndexAlphaBits)) + + (g << IndexBits) + + g; + + int r_g = r + g; +#endif + for (int b = 1; b < IndexCount; b++) { +#if ALTERNATE + int ind1_b = ind1_g + + ((r_g + b) << IndexAlphaBits) + + b; +#endif + Moment line = default; for (int a = 1; a < IndexAlphaCount; a++) { +#if ALTERNATE + int ind1 = ind1_b + a; +#else int ind1 = GetPaletteIndex(r, g, b, a); +#endif line += momentSpan[ind1]; areaSpan[a] += line; diff --git a/tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs b/tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs index de8d412029..b339222627 100644 --- a/tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs +++ b/tests/ImageSharp.Benchmarks/Codecs/EncodeIndexedPng.cs @@ -85,7 +85,7 @@ namespace SixLabors.ImageSharp.Benchmarks.Codecs public void PngCoreWuNoDither() { using var memoryStream = new MemoryStream(); - var options = new PngEncoder { Quantizer = new WuQuantizer(new QuantizerOptions { Dither = null }) }; + var options = new PngEncoder { Quantizer = new WuQuantizer(new QuantizerOptions { Dither = null }), ColorType = PngColorType.Palette }; this.bmpCore.SaveAsPng(memoryStream, options); } }