From 103b4402132d27cc981ce7cdfa469ba02be21ed0 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Mon, 28 Jun 2021 14:02:31 +0200 Subject: [PATCH] Fix another issue with converting the last row to yuv --- src/ImageSharp/Formats/WebP/Lossy/YuvConversion.cs | 10 ++++++---- .../ImageSharp.Tests/Formats/WebP/WebpEncoderTests.cs | 1 - 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/ImageSharp/Formats/WebP/Lossy/YuvConversion.cs b/src/ImageSharp/Formats/WebP/Lossy/YuvConversion.cs index f6bc14570..cf3f32e8e 100644 --- a/src/ImageSharp/Formats/WebP/Lossy/YuvConversion.cs +++ b/src/ImageSharp/Formats/WebP/Lossy/YuvConversion.cs @@ -44,7 +44,6 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy Span rgbaRow1 = rgbaRow1Buffer.GetSpan(); int uvRowIndex = 0; int rowIndex; - bool rowsHaveAlpha = false; for (rowIndex = 0; rowIndex < height - 1; rowIndex += 2) { Span rowSpan = image.GetPixelRowSpan(rowIndex); @@ -52,7 +51,7 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy PixelOperations.Instance.ToRgba32(configuration, rowSpan, rgbaRow0); PixelOperations.Instance.ToRgba32(configuration, nextRowSpan, rgbaRow1); - rowsHaveAlpha = CheckNonOpaque(rgbaRow0) && CheckNonOpaque(rgbaRow1); + var rowsHaveAlpha = CheckNonOpaque(rgbaRow0) && CheckNonOpaque(rgbaRow1); // Downsample U/V planes, two rows at a time. if (!rowsHaveAlpha) @@ -74,7 +73,11 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy // Extra last row. if ((height & 1) != 0) { - if (!rowsHaveAlpha) + Span rowSpan = image.GetPixelRowSpan(rowIndex); + PixelOperations.Instance.ToRgba32(configuration, rowSpan, rgbaRow0); + ConvertRgbaToY(rgbaRow0, y.Slice(rowIndex * width), width); + + if (!CheckNonOpaque(rgbaRow0)) { AccumulateRgb(rgbaRow0, rgbaRow0, tmpRgbSpan, width); } @@ -83,7 +86,6 @@ namespace SixLabors.ImageSharp.Formats.Webp.Lossy AccumulateRgba(rgbaRow0, rgbaRow0, tmpRgbSpan, width); } - ConvertRgbaToY(rgbaRow0, y.Slice(rowIndex * width), width); ConvertRgbaToUv(tmpRgbSpan, u.Slice(uvRowIndex * uvWidth), v.Slice(uvRowIndex * uvWidth), uvWidth); } } diff --git a/tests/ImageSharp.Tests/Formats/WebP/WebpEncoderTests.cs b/tests/ImageSharp.Tests/Formats/WebP/WebpEncoderTests.cs index f7aaad700..4c054d7e7 100644 --- a/tests/ImageSharp.Tests/Formats/WebP/WebpEncoderTests.cs +++ b/tests/ImageSharp.Tests/Formats/WebP/WebpEncoderTests.cs @@ -4,7 +4,6 @@ using System.IO; using SixLabors.ImageSharp.Formats.Webp; using SixLabors.ImageSharp.PixelFormats; -using SixLabors.ImageSharp.Processing; using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison; using Xunit; using static SixLabors.ImageSharp.Tests.TestImages.WebP;