diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromCmykAvx.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromCmykAvx.cs index 038fc8f9dd..0b170140ab 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromCmykAvx.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromCmykAvx.cs @@ -60,7 +60,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components // Used for the color conversion var scale = Vector256.Create(this.MaximumValue); - var one = Vector256.Create(1f); nint n = values.Component0.Length / Vector256.Count; for (nint i = 0; i < n; i++) @@ -70,21 +69,21 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components ref Vector256 c2 = ref Unsafe.Add(ref c2Base, i); ref Vector256 c3 = ref Unsafe.Add(ref c3Base, i); - Vector256 ctmp = Avx.Subtract(one, c0); - Vector256 mtmp = Avx.Subtract(one, c1); - Vector256 ytmp = Avx.Subtract(one, c2); + Vector256 ctmp = Avx.Subtract(scale, c0); + Vector256 mtmp = Avx.Subtract(scale, c1); + Vector256 ytmp = Avx.Subtract(scale, c2); Vector256 ktmp = Avx.Min(ctmp, Avx.Min(mtmp, ytmp)); - Vector256 kMask = Avx.CompareNotEqual(ktmp, one); + Vector256 kMask = Avx.CompareNotEqual(ktmp, scale); - ctmp = Avx.And(Avx.Divide(Avx.Subtract(ctmp, ktmp), Avx.Subtract(one, ktmp)), kMask); - mtmp = Avx.And(Avx.Divide(Avx.Subtract(mtmp, ktmp), Avx.Subtract(one, ktmp)), kMask); - ytmp = Avx.And(Avx.Divide(Avx.Subtract(ytmp, ktmp), Avx.Subtract(one, ktmp)), kMask); + ctmp = Avx.And(Avx.Divide(Avx.Subtract(ctmp, ktmp), Avx.Subtract(scale, ktmp)), kMask); + mtmp = Avx.And(Avx.Divide(Avx.Subtract(mtmp, ktmp), Avx.Subtract(scale, ktmp)), kMask); + ytmp = Avx.And(Avx.Divide(Avx.Subtract(ytmp, ktmp), Avx.Subtract(scale, ktmp)), kMask); c0 = Avx.Subtract(scale, Avx.Multiply(ctmp, scale)); c1 = Avx.Subtract(scale, Avx.Multiply(mtmp, scale)); c2 = Avx.Subtract(scale, Avx.Multiply(ytmp, scale)); - c3 = Avx.Subtract(scale, Avx.Multiply(ktmp, scale)); + c3 = Avx.Subtract(scale, ktmp); } } } diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromCmykScalar.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromCmykScalar.cs index 33fe742471..13352ba7b5 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromCmykScalar.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromCmykScalar.cs @@ -51,12 +51,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components for (int i = 0; i < c0.Length; i++) { - float ctmp = 1f - c0[i]; - float mtmp = 1f - c1[i]; - float ytmp = 1f - c2[i]; + float ctmp = 255f - c0[i]; + float mtmp = 255f - c1[i]; + float ytmp = 255f - c2[i]; float ktmp = MathF.Min(MathF.Min(ctmp, mtmp), ytmp); - if (1f - ktmp <= float.Epsilon) + if (255f - ktmp <= float.Epsilon) { ctmp = 0f; mtmp = 0f; @@ -64,15 +64,15 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components } else { - ctmp = (ctmp - ktmp) / (1f - ktmp); - mtmp = (mtmp - ktmp) / (1f - ktmp); - ytmp = (ytmp - ktmp) / (1f - ktmp); + ctmp = (ctmp - ktmp) / (255f - ktmp); + mtmp = (mtmp - ktmp) / (255f - ktmp); + ytmp = (ytmp - ktmp) / (255f - ktmp); } c0[i] = maxValue - (ctmp * maxValue); c1[i] = maxValue - (mtmp * maxValue); c2[i] = maxValue - (ytmp * maxValue); - c3[i] = maxValue - (ktmp * maxValue); + c3[i] = maxValue - ktmp; } } } diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromCmykVector.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromCmykVector.cs index ff2bd2323f..d445546050 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromCmykVector.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromCmykVector.cs @@ -60,7 +60,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components // Used for the color conversion var scale = new Vector(this.MaximumValue); - var one = new Vector(1f); nint n = values.Component0.Length / Vector.Count; for (nint i = 0; i < n; i++) @@ -70,20 +69,20 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components ref Vector c2 = ref Unsafe.Add(ref c2Base, i); ref Vector c3 = ref Unsafe.Add(ref c3Base, i); - Vector ctmp = one - c0; - Vector mtmp = one - c1; - Vector ytmp = one - c2; + Vector ctmp = scale - c0; + Vector mtmp = scale - c1; + Vector ytmp = scale - c2; Vector ktmp = Vector.Min(ctmp, Vector.Min(mtmp, ytmp)); - var kMask = Vector.Equals(ktmp, Vector.One); - ctmp = Vector.AndNot((ctmp - ktmp) / (one - ktmp), kMask.As()); - mtmp = Vector.AndNot((mtmp - ktmp) / (one - ktmp), kMask.As()); - ytmp = Vector.AndNot((ytmp - ktmp) / (one - ktmp), kMask.As()); + var kMask = Vector.Equals(ktmp, scale); + ctmp = Vector.AndNot((ctmp - ktmp) / (scale - ktmp), kMask.As()); + mtmp = Vector.AndNot((mtmp - ktmp) / (scale - ktmp), kMask.As()); + ytmp = Vector.AndNot((ytmp - ktmp) / (scale - ktmp), kMask.As()); c0 = scale - (ctmp * scale); c1 = scale - (mtmp * scale); c2 = scale - (ytmp * scale); - c3 = scale - (ktmp * scale); + c3 = scale - ktmp; } } diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromGrayScaleAvx.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromGrayScaleAvx.cs index 778424a15d..c38545b41c 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromGrayScaleAvx.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromGrayScaleAvx.cs @@ -20,34 +20,10 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components public override void ConvertToRgbInplace(in ComponentValues values) { - ref Vector256 c0Base = - ref Unsafe.As>(ref MemoryMarshal.GetReference(values.Component0)); - - // Used for the color conversion - var scale = Vector256.Create(1 / this.MaximumValue); - - nint n = values.Component0.Length / Vector256.Count; - for (nint i = 0; i < n; i++) - { - ref Vector256 c0 = ref Unsafe.Add(ref c0Base, i); - c0 = Avx.Multiply(c0, scale); - } } public override void ConvertFromRgbInplace(in ComponentValues values) { - ref Vector256 c0Base = - ref Unsafe.As>(ref MemoryMarshal.GetReference(values.Component0)); - - // Used for the color conversion - var scale = Vector256.Create(this.MaximumValue); - - nint n = values.Component0.Length / Vector256.Count; - for (nint i = 0; i < n; i++) - { - ref Vector256 c0 = ref Unsafe.Add(ref c0Base, i); - c0 = Avx.Multiply(c0, scale); - } } } } diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromGrayScaleScalar.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromGrayScaleScalar.cs index 027d762ea9..5981bf1ac7 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromGrayScaleScalar.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromGrayScaleScalar.cs @@ -24,24 +24,10 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components internal static void ConvertCoreInplaceToRgb(Span values, float maxValue) { - ref float valuesRef = ref MemoryMarshal.GetReference(values); - float scale = 1 / maxValue; - - for (nint i = 0; i < values.Length; i++) - { - Unsafe.Add(ref valuesRef, i) *= scale; - } } internal static void ConvertCoreInplaceFromRgb(Span values, float maxValue) { - ref float valuesRef = ref MemoryMarshal.GetReference(values); - float scale = maxValue; - - for (nint i = 0; i < values.Length; i++) - { - Unsafe.Add(ref valuesRef, i) *= scale; - } } } } diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromGrayScaleVector.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromGrayScaleVector.cs index e1d9178dd0..3ffacb909a 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromGrayScaleVector.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromGrayScaleVector.cs @@ -36,21 +36,11 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components protected override void ConvertCoreVectorizedInplaceFromRgb(in ComponentValues values) { - ref Vector cBase = - ref Unsafe.As>(ref MemoryMarshal.GetReference(values.Component0)); - - var scale = new Vector(this.MaximumValue); - - nint n = values.Component0.Length / Vector.Count; - for (nint i = 0; i < n; i++) - { - ref Vector c0 = ref Unsafe.Add(ref cBase, i); - c0 *= scale; - } } protected override void ConvertCoreInplaceFromRgb(in ComponentValues values) - => FromGrayscaleScalar.ConvertCoreInplaceFromRgb(values.Component0, this.MaximumValue); + { + } } } } diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromRgbAvx.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromRgbAvx.cs index 987fe01e5f..070311e119 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromRgbAvx.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromRgbAvx.cs @@ -43,25 +43,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components public override void ConvertFromRgbInplace(in ComponentValues values) { - ref Vector256 rBase = - ref Unsafe.As>(ref MemoryMarshal.GetReference(values.Component0)); - ref Vector256 gBase = - ref Unsafe.As>(ref MemoryMarshal.GetReference(values.Component1)); - ref Vector256 bBase = - ref Unsafe.As>(ref MemoryMarshal.GetReference(values.Component2)); - - // Used for the color conversion - var scale = Vector256.Create(this.MaximumValue); - nint n = values.Component0.Length / Vector256.Count; - for (nint i = 0; i < n; i++) - { - ref Vector256 r = ref Unsafe.Add(ref rBase, i); - ref Vector256 g = ref Unsafe.Add(ref gBase, i); - ref Vector256 b = ref Unsafe.Add(ref bBase, i); - r = Avx.Multiply(r, scale); - g = Avx.Multiply(g, scale); - b = Avx.Multiply(b, scale); - } } } } diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromRgbScalar.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromRgbScalar.cs index e92e5e34d8..db61359121 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromRgbScalar.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromRgbScalar.cs @@ -27,9 +27,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components internal static void ConvertCoreInplaceFromRgb(ComponentValues values, float maxValue) { - FromGrayscaleScalar.ConvertCoreInplaceFromRgb(values.Component0, maxValue); - FromGrayscaleScalar.ConvertCoreInplaceFromRgb(values.Component1, maxValue); - FromGrayscaleScalar.ConvertCoreInplaceFromRgb(values.Component2, maxValue); } } } diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromRgbVector.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromRgbVector.cs index 2150c3459b..f16bf8178d 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromRgbVector.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromRgbVector.cs @@ -44,29 +44,11 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components protected override void ConvertCoreVectorizedInplaceFromRgb(in ComponentValues values) { - ref Vector rBase = - ref Unsafe.As>(ref MemoryMarshal.GetReference(values.Component0)); - ref Vector gBase = - ref Unsafe.As>(ref MemoryMarshal.GetReference(values.Component1)); - ref Vector bBase = - ref Unsafe.As>(ref MemoryMarshal.GetReference(values.Component2)); - - var scale = new Vector(this.MaximumValue); - - nint n = values.Component0.Length / Vector.Count; - for (nint i = 0; i < n; i++) - { - ref Vector r = ref Unsafe.Add(ref rBase, i); - ref Vector g = ref Unsafe.Add(ref gBase, i); - ref Vector b = ref Unsafe.Add(ref bBase, i); - r *= scale; - g *= scale; - b *= scale; - } } protected override void ConvertCoreInplaceFromRgb(in ComponentValues values) - => FromRgbScalar.ConvertCoreInplaceFromRgb(values, this.MaximumValue); + { + } } } } diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYCbCrAvx.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYCbCrAvx.cs index 983fad8d09..6df2b714bc 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYCbCrAvx.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYCbCrAvx.cs @@ -81,7 +81,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components // Used for the color conversion var chromaOffset = Vector256.Create(this.HalfValue); - var scale = Vector256.Create(this.MaximumValue); var f0299 = Vector256.Create(0.299f); var f0587 = Vector256.Create(0.587f); var f0114 = Vector256.Create(0.114f); diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYCbCrScalar.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYCbCrScalar.cs index d01f4c5f91..8e17c51300 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYCbCrScalar.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYCbCrScalar.cs @@ -55,13 +55,11 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components Span c1 = values.Component1; Span c2 = values.Component2; - float scale = maxValue; - for (int i = 0; i < c0.Length; i++) { - float r = c0[i] * scale; - float g = c1[i] * scale; - float b = c2[i] * scale; + float r = c0[i]; + float g = c1[i]; + float b = c2[i]; // y = 0 + (0.299 * r) + (0.587 * g) + (0.114 * b) // cb = 128 - (0.168736 * r) - (0.331264 * g) + (0.5 * b) diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYCbCrVector.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYCbCrVector.cs index 9fd372a312..34790e41b6 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYCbCrVector.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYCbCrVector.cs @@ -81,8 +81,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components var chromaOffset = new Vector(this.HalfValue); - var scale = new Vector(this.MaximumValue); - var rYMult = new Vector(0.299f); var gYMult = new Vector(0.587f); var bYMult = new Vector(0.114f); @@ -102,9 +100,9 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components ref Vector c1 = ref Unsafe.Add(ref c1Base, i); ref Vector c2 = ref Unsafe.Add(ref c2Base, i); - Vector r = c0 * scale; - Vector g = c1 * scale; - Vector b = c2 * scale; + Vector r = c0; + Vector g = c1; + Vector b = c2; // y = 0 + (0.299 * r) + (0.587 * g) + (0.114 * b) // cb = 128 - (0.168736 * r) - (0.331264 * g) + (0.5 * b) diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYccKAvx.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYccKAvx.cs index d09e3f7473..d75d8277c8 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYccKAvx.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYccKAvx.cs @@ -19,8 +19,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components { } - public override void ConvertFromRgbInplace(in ComponentValues values) => throw new System.NotImplementedException(); - public override void ConvertToRgbInplace(in ComponentValues values) { ref Vector256 c0Base = @@ -78,6 +76,9 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components c2 = b; } } + + public override void ConvertFromRgbInplace(in ComponentValues values) + => throw new System.NotImplementedException(); } } } diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYccKScalar.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYccKScalar.cs index 755839e244..353d085e8e 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYccKScalar.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYccKScalar.cs @@ -14,11 +14,8 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components { } - public override void ConvertToRgbInplace(in ComponentValues values) => - ConvertToRgpInplace(values, this.MaximumValue, this.HalfValue); - - public override void ConvertFromRgbInplace(in ComponentValues values) - => throw new NotImplementedException(); + public override void ConvertToRgbInplace(in ComponentValues values) + => ConvertToRgpInplace(values, this.MaximumValue, this.HalfValue); public static void ConvertToRgpInplace(in ComponentValues values, float maxValue, float halfValue) { @@ -41,6 +38,9 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components c2[i] = (maxValue - MathF.Round(y + (1.772F * cb), MidpointRounding.AwayFromZero)) * scaledK; } } + + public override void ConvertFromRgbInplace(in ComponentValues values) + => throw new NotImplementedException(); } } } diff --git a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYccKVector.cs b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYccKVector.cs index c4fd7ca326..c8967f1f10 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYccKVector.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/ColorConverters/JpegColorConverter.FromYccKVector.cs @@ -71,9 +71,11 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components protected override void ConvertCoreInplaceToRgb(in ComponentValues values) => FromYccKScalar.ConvertToRgpInplace(values, this.MaximumValue, this.HalfValue); - protected override void ConvertCoreVectorizedInplaceFromRgb(in ComponentValues values) => throw new System.NotImplementedException(); + protected override void ConvertCoreVectorizedInplaceFromRgb(in ComponentValues values) + => throw new System.NotImplementedException(); - protected override void ConvertCoreInplaceFromRgb(in ComponentValues values) => throw new System.NotImplementedException(); + protected override void ConvertCoreInplaceFromRgb(in ComponentValues values) + => throw new System.NotImplementedException(); } } }