Add pixel test for 8-bit image scaling Adds a pixel test that covers 8-bit to 8-bit image scaling, such as when a soft mask is scaled. The Skia renderer currently handles this case poorly because it uses nearest neighbor scaling for 8-bit images. Bug: pdfium:1976 Change-Id: I02816c90168bcdffb003c5ba581b4b54834015f6 Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/103870 Commit-Queue: K. Moon <kmoon@chromium.org> Reviewed-by: Nigi <nigi@chromium.org>
diff --git a/testing/SUPPRESSIONS b/testing/SUPPRESSIONS index 0746c48..f5bb133 100644 --- a/testing/SUPPRESSIONS +++ b/testing/SUPPRESSIONS
@@ -397,11 +397,14 @@ # TODO(pdfium:1963): Remove after associated bug is fixed bug_1963.in * * * skia +# TODO(pdfium:1968): Remove after associated bug is fixed +bug_1966.in * * * skia + # TODO(pdfium:1973): Remove after associated bug is fixed bug_1973.in * * * agg,skia -# TODO(pdfium:1968): Remove after associated bug is fixed -bug_1966.in * * * skia +# TODO(pdfium:1976): Remove after associated bug is fixed +bug_1976.in * * * skia # TODO(chromium:237527): Remove after associated bug is fixed bug_237527_1.in * * * *
diff --git a/testing/resources/pixel/bug_1976.in b/testing/resources/pixel/bug_1976.in new file mode 100644 index 0000000..696f5da --- /dev/null +++ b/testing/resources/pixel/bug_1976.in
@@ -0,0 +1,83 @@ +{{header}} +{{object 1 0}} << + /Type /Catalog + /Pages 2 0 R +>> +endobj +{{object 2 0}} << + /Type /Pages + /Count 1 + /Kids [3 0 R] +>> +endobj +{{object 3 0}} << + /Type /Page + /Parent 2 0 R + /Contents 4 0 R + /MediaBox [0 0 96 96] + /Resources << + /XObject << + /X0 5 0 R + >> + >> +>> +endobj + +% Green and red checkerboard. When scaled down, the green and red should blend +% together into a darker yellow. +{{object 4 0}} << + {{streamlen}} +>> +stream +q + % Solid green square. + 0 1 0 rg + 16 16 64 64 re f +Q +q + % Transparent and red checkerboard. + 64 0 0 64 16 16 cm + /X0 Do +Q +endstream +endobj + +% Single pixel image with /SMask to trigger masked image rendering. +{{object 5 0}} << + /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /ColorSpace /DeviceRGB + /Filter /ASCIIHexDecode + /Height 1 + /SMask 6 0 R + /Width 1 + {{streamlen}} +>> +stream +FF 00 00 +endstream +endobj + +% Grayscale checkerboard to trigger 8-bit to 8-bit scaling. Scaling down by a +% multiple of 2 using nearest neighbor gives particularly bad results. +{{object 6 0}} << + /Type /XObject + /Subtype /Image + /BitsPerComponent 8 + /ColorSpace /DeviceGray + /Filter [/ASCII85Decode /FlateDecode] + /Height 128 + /Width 128 + {{streamlen}} +>> +stream +GhVQ20b"*_#f&.lRiX?CBI7,$dqQl"iofLfkND$kkND$kkND$kkND$kkND$kkND$kkND$kkND$kkND$k +kND$kkND$kkND$kkND$kkND$kkN@?Q?he3kdJ~> +endstream +endobj + +{{xref}} +{{trailer}} +{{startxref}} +%%EOF
diff --git a/testing/resources/pixel/bug_1976_expected.pdf.0.png b/testing/resources/pixel/bug_1976_expected.pdf.0.png new file mode 100644 index 0000000..59bfc84 --- /dev/null +++ b/testing/resources/pixel/bug_1976_expected.pdf.0.png Binary files differ