diff --git a/src/ImageSharp/Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs b/src/ImageSharp/Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs index e80ac3c98..236eff27c 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Encoder/RgbToYCbCrTables.cs @@ -105,28 +105,18 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Encoder ref Block8x8F crResult, int i) { - ref int start = ref Unsafe.As(ref this); + // float y = (0.299F * r) + (0.587F * g) + (0.114F * b); + yResult[i] = (this.YRTable[r] + this.YGTable[g] + this.YBTable[b]) >> ScaleBits; - ref int yR = ref start; - ref int yG = ref Unsafe.Add(ref start, 256 * 1); - ref int yB = ref Unsafe.Add(ref start, 256 * 2); + // float cb = 128F + ((-0.168736F * r) - (0.331264F * g) + (0.5F * b)); + cbResult[i] = (this.CbRTable[r] + this.CbGTable[g] + this.CbBTable[b]) >> ScaleBits; - ref int cbR = ref Unsafe.Add(ref start, 256 * 3); - ref int cbG = ref Unsafe.Add(ref start, 256 * 4); - ref int cbB = ref Unsafe.Add(ref start, 256 * 5); - - ref int crG = ref Unsafe.Add(ref start, 256 * 6); - ref int crB = ref Unsafe.Add(ref start, 256 * 7); - - yResult[i] = (Unsafe.Add(ref yR, r) + Unsafe.Add(ref yG, g) + Unsafe.Add(ref yB, b)) >> ScaleBits; - cbResult[i] = (Unsafe.Add(ref cbR, r) + Unsafe.Add(ref cbG, g) + Unsafe.Add(ref cbB, b)) >> ScaleBits; - crResult[i] = (Unsafe.Add(ref cbB, r) + Unsafe.Add(ref crG, g) + Unsafe.Add(ref crB, b)) >> ScaleBits; + // float cr = MathF.Round(y + (1.772F * cb), MidpointRounding.AwayFromZero); + crResult[i] = (this.CbBTable[r] + this.CrGTable[g] + this.CrBTable[b]) >> ScaleBits; } [MethodImpl(MethodImplOptions.AggressiveInlining)] private static int Fix(float x) - { - return (int)((x * (1L << ScaleBits)) + 0.5F); - } + => (int)((x * (1L << ScaleBits)) + 0.5F); } }