diff --git a/src/ImageSharp/PixelFormats/PixelConversionModifiersExtensions.cs b/src/ImageSharp/PixelFormats/PixelConversionModifiersExtensions.cs
index bf77f8511..529041481 100644
--- a/src/ImageSharp/PixelFormats/PixelConversionModifiersExtensions.cs
+++ b/src/ImageSharp/PixelFormats/PixelConversionModifiersExtensions.cs
@@ -5,6 +5,9 @@ using System.Runtime.CompilerServices;
namespace SixLabors.ImageSharp.PixelFormats
{
+ ///
+ /// Extension and utility methods for .
+ ///
internal static class PixelConversionModifiersExtensions
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@@ -16,5 +19,20 @@ namespace SixLabors.ImageSharp.PixelFormats
this PixelConversionModifiers modifiers,
PixelConversionModifiers removeThis) =>
modifiers & ~removeThis;
+
+ ///
+ /// Applies the union of and ,
+ /// if is true, returns unmodified otherwise.
+ ///
+ ///
+ /// and
+ /// should be always used together!
+ ///
+ public static PixelConversionModifiers ApplyCompanding(
+ this PixelConversionModifiers originalModifiers,
+ bool compand) =>
+ compand
+ ? originalModifiers | PixelConversionModifiers.Scale | PixelConversionModifiers.SRgbCompand
+ : originalModifiers;
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs
index 2c186a276..198427d28 100644
--- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs
@@ -236,11 +236,8 @@ namespace SixLabors.ImageSharp.Processing.Processors.Transforms
int sourceHeight = source.Height;
- PixelConversionModifiers conversionModifiers = PixelConversionModifiers.Premultiply;
- if (this.Compand)
- {
- conversionModifiers |= PixelConversionModifiers.Scale | PixelConversionModifiers.SRgbCompand;
- }
+ PixelConversionModifiers conversionModifiers =
+ PixelConversionModifiers.Premultiply.ApplyCompanding(this.Compand);
// Interpolate the image using the calculated weights.
// A 2-pass 1D algorithm appears to be faster than splitting a 1-pass 2D algorithm
diff --git a/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelConversionModifiersExtensionsTests.cs b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelConversionModifiersExtensionsTests.cs
new file mode 100644
index 000000000..e98e14fc6
--- /dev/null
+++ b/tests/ImageSharp.Tests/PixelFormats/PixelOperations/PixelConversionModifiersExtensionsTests.cs
@@ -0,0 +1,65 @@
+// // Copyright (c) Six Labors and contributors.
+// // Licensed under the Apache License, Version 2.0.
+// // Copyright (c) Six Labors and contributors.
+// // Licensed under the Apache License, Version 2.0.
+// // Copyright (c) Six Labors and contributors.
+// // Licensed under the Apache License, Version 2.0.
+
+using SixLabors.ImageSharp.PixelFormats;
+
+using Xunit;
+
+namespace SixLabors.ImageSharp.Tests.PixelFormats.PixelOperations
+{
+ public class PixelConversionModifiersExtensionsTests
+ {
+ [Theory]
+ [InlineData(PixelConversionModifiers.None, PixelConversionModifiers.None, true)]
+ [InlineData(PixelConversionModifiers.None, PixelConversionModifiers.Premultiply, false)]
+ [InlineData(PixelConversionModifiers.SRgbCompand, PixelConversionModifiers.Premultiply, false)]
+ [InlineData(
+ PixelConversionModifiers.Premultiply | PixelConversionModifiers.Scale,
+ PixelConversionModifiers.Premultiply,
+ true)]
+ [InlineData(
+ PixelConversionModifiers.Premultiply | PixelConversionModifiers.Scale,
+ PixelConversionModifiers.Premultiply | PixelConversionModifiers.Scale,
+ true)]
+ [InlineData(
+ PixelConversionModifiers.Premultiply | PixelConversionModifiers.Scale,
+ PixelConversionModifiers.Scale,
+ true)]
+ internal void IsDefined(
+ PixelConversionModifiers baselineModifiers,
+ PixelConversionModifiers checkModifiers,
+ bool expected)
+ {
+ Assert.Equal(expected, baselineModifiers.IsDefined(checkModifiers));
+ }
+
+ [Theory]
+ [InlineData(PixelConversionModifiers.Premultiply | PixelConversionModifiers.Scale | PixelConversionModifiers.SRgbCompand,
+ PixelConversionModifiers.Scale, PixelConversionModifiers.Premultiply | PixelConversionModifiers.SRgbCompand)]
+ [InlineData(PixelConversionModifiers.None, PixelConversionModifiers.Premultiply, PixelConversionModifiers.None)]
+ internal void Remove(
+ PixelConversionModifiers baselineModifiers,
+ PixelConversionModifiers toRemove,
+ PixelConversionModifiers expected)
+ {
+ PixelConversionModifiers result = baselineModifiers.Remove(toRemove);
+ Assert.Equal(expected, result);
+ }
+
+ [Theory]
+ [InlineData(PixelConversionModifiers.Premultiply, false, PixelConversionModifiers.Premultiply)]
+ [InlineData(PixelConversionModifiers.Premultiply, true, PixelConversionModifiers.Premultiply | PixelConversionModifiers.SRgbCompand | PixelConversionModifiers.Scale)]
+ internal void ApplyCompanding(
+ PixelConversionModifiers baselineModifiers,
+ bool compand,
+ PixelConversionModifiers expected)
+ {
+ PixelConversionModifiers result = baselineModifiers.ApplyCompanding(compand);
+ Assert.Equal(expected, result);
+ }
+ }
+}
\ No newline at end of file