From 44ff0bf5b006d560aed6ad9a71756005a93fbfe5 Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Sun, 21 Jul 2024 14:52:26 +0200 Subject: [PATCH] Improved accuracy of Average --- HPPH.Reference/PixelHelper.Average.cs | 40 +++++++++++++-------------- HPPH/PixelHelper.Average.cs | 14 +++++----- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/HPPH.Reference/PixelHelper.Average.cs b/HPPH.Reference/PixelHelper.Average.cs index 2553764..c11a3ab 100644 --- a/HPPH.Reference/PixelHelper.Average.cs +++ b/HPPH.Reference/PixelHelper.Average.cs @@ -9,10 +9,10 @@ public static partial class ReferencePixelHelper float count = image.Width * image.Height; ISum sum = Sum(image); - return new ColorRGBA((byte)(sum.R / count), - (byte)(sum.G / count), - (byte)(sum.B / count), - (byte)(sum.A / count)); + return new ColorRGBA((byte)MathF.Round(sum.R / count), + (byte)MathF.Round(sum.G / count), + (byte)MathF.Round(sum.B / count), + (byte)MathF.Round(sum.A / count)); } public static T Average(IImage image) @@ -21,10 +21,10 @@ public static partial class ReferencePixelHelper float count = image.Width * image.Height; ISum sum = Sum(image); - return (T)T.Create((byte)(sum.R / count), - (byte)(sum.G / count), - (byte)(sum.B / count), - (byte)(sum.A / count)); + return (T)T.Create((byte)MathF.Round(sum.R / count), + (byte)MathF.Round(sum.G / count), + (byte)MathF.Round(sum.B / count), + (byte)MathF.Round(sum.A / count)); } public static T Average(RefImage image) @@ -33,10 +33,10 @@ public static partial class ReferencePixelHelper float count = image.Width * image.Height; ISum sum = Sum(image); - return (T)T.Create((byte)(sum.R / count), - (byte)(sum.G / count), - (byte)(sum.B / count), - (byte)(sum.A / count)); + return (T)T.Create((byte)MathF.Round(sum.R / count), + (byte)MathF.Round(sum.G / count), + (byte)MathF.Round(sum.B / count), + (byte)MathF.Round(sum.A / count)); } public static T Average(Span colors) @@ -45,10 +45,10 @@ public static partial class ReferencePixelHelper float count = colors.Length; ISum sum = Sum(colors); - return (T)T.Create((byte)(sum.R / count), - (byte)(sum.G / count), - (byte)(sum.B / count), - (byte)(sum.A / count)); + return (T)T.Create((byte)MathF.Round(sum.R / count), + (byte)MathF.Round(sum.G / count), + (byte)MathF.Round(sum.B / count), + (byte)MathF.Round(sum.A / count)); } public static T Average(ReadOnlySpan colors) @@ -57,10 +57,10 @@ public static partial class ReferencePixelHelper float count = colors.Length; ISum sum = Sum(colors); - return (T)T.Create((byte)(sum.R / count), - (byte)(sum.G / count), - (byte)(sum.B / count), - (byte)(sum.A / count)); + return (T)T.Create((byte)MathF.Round(sum.R / count), + (byte)MathF.Round(sum.G / count), + (byte)MathF.Round(sum.B / count), + (byte)MathF.Round(sum.A / count)); } #endregion diff --git a/HPPH/PixelHelper.Average.cs b/HPPH/PixelHelper.Average.cs index 054a519..b3744a2 100644 --- a/HPPH/PixelHelper.Average.cs +++ b/HPPH/PixelHelper.Average.cs @@ -82,9 +82,9 @@ public static partial class PixelHelper Generic4LongData sum = Sum(data); float count = data.Length; - return new Generic3ByteData((byte)(sum.L1 / count), - (byte)(sum.L2 / count), - (byte)(sum.L3 / count)); + return new Generic3ByteData((byte)MathF.Round(sum.L1 / count), + (byte)MathF.Round(sum.L2 / count), + (byte)MathF.Round(sum.L3 / count)); } private static Generic4ByteData Average(ReadOnlySpan data) @@ -96,10 +96,10 @@ public static partial class PixelHelper Generic4LongData sum = Sum(data); float count = data.Length; - return new Generic4ByteData((byte)(sum.L1 / count), - (byte)(sum.L2 / count), - (byte)(sum.L3 / count), - (byte)(sum.L4 / count)); + return new Generic4ByteData((byte)MathF.Round(sum.L1 / count), + (byte)MathF.Round(sum.L2 / count), + (byte)MathF.Round(sum.L3 / count), + (byte)MathF.Round(sum.L4 / count)); } #endregion