|
 |
be40d7 |
From 41594786266265c1b7d5116ab85b38af0cd1fd59 Mon Sep 17 00:00:00 2001
|
|
 |
be40d7 |
From: Stephan Bergmann <sbergman@redhat.com>
|
|
 |
be40d7 |
Date: Wed, 23 Sep 2020 12:01:35 +0200
|
|
 |
be40d7 |
Subject: [PATCH] Correctly read PNG into bitmaps N32BitTcA... formats (where
|
|
 |
be40d7 |
alpha comes first)
|
|
 |
be40d7 |
|
|
 |
be40d7 |
This appears to be a regression introduced with
|
|
 |
be40d7 |
86ea64f216819696cd86d1926aff0a138ace2baf "Support for native 32bit Bitmap in VCL
|
|
 |
be40d7 |
and SVP (cairo) backend". It caused CppunitTest_vcl_png_test to fail on
|
|
 |
be40d7 |
(big-endian) Linux s390x with
|
|
 |
be40d7 |
|
|
 |
be40d7 |
> vcl/qa/cppunit/png/PngFilterTest.cxx:176:PngFilterTest::testPng
|
|
 |
be40d7 |
> equality assertion failed
|
|
 |
be40d7 |
> - Expected: c[ff000040]
|
|
 |
be40d7 |
> - Actual : c[0000ff40]
|
|
 |
be40d7 |
|
|
 |
be40d7 |
where eFormat happens to be ScanlineFormat::N32BitTcArgb, vs.
|
|
 |
be40d7 |
ScanlineFormat::N32BitTcBgra on e.g. Linux x86-64 (and which thus didn't notice
|
|
 |
be40d7 |
the lack of support for N32BitTcA... formats where alpha goes first instead of
|
|
 |
be40d7 |
last).
|
|
 |
be40d7 |
|
|
 |
be40d7 |
Change-Id: Id6030468718f6ef831b42f2b5ad7ba2c4c46a805
|
|
 |
be40d7 |
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103240
|
|
 |
be40d7 |
Tested-by: Jenkins
|
|
 |
be40d7 |
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
|
|
 |
be40d7 |
(cherry picked from commit 0387077e6647d7a30fd36d4ec41dfc559afe45c3)
|
|
 |
be40d7 |
---
|
|
 |
be40d7 |
vcl/source/filter/png/PngImageReader.cxx | 11 ++++++++++-
|
|
 |
be40d7 |
1 file changed, 10 insertions(+), 1 deletion(-)
|
|
 |
be40d7 |
|
|
 |
be40d7 |
diff --git a/vcl/source/filter/png/PngImageReader.cxx b/vcl/source/filter/png/PngImageReader.cxx
|
|
 |
be40d7 |
index 958cae34eb46..6e9f3825face 100644
|
|
 |
be40d7 |
--- a/vcl/source/filter/png/PngImageReader.cxx
|
|
 |
be40d7 |
+++ b/vcl/source/filter/png/PngImageReader.cxx
|
|
 |
be40d7 |
@@ -188,6 +188,8 @@ bool reader(SvStream& rStream, BitmapEx& rBitmapEx, bool bUseBitmap32)
|
|
 |
be40d7 |
for (auto& rRow : aRows)
|
|
 |
be40d7 |
rRow.resize(aRowSizeBytes, 0);
|
|
 |
be40d7 |
|
|
 |
be40d7 |
+ auto const alphaFirst = (eFormat == ScanlineFormat::N32BitTcAbgr
|
|
 |
be40d7 |
+ || eFormat == ScanlineFormat::N32BitTcArgb);
|
|
 |
be40d7 |
for (int pass = 0; pass < nNumberOfPasses; pass++)
|
|
 |
be40d7 |
{
|
|
 |
be40d7 |
for (png_uint_32 y = 0; y < height; y++)
|
|
 |
be40d7 |
@@ -199,10 +201,17 @@ bool reader(SvStream& rStream, BitmapEx& rBitmapEx, bool bUseBitmap32)
|
|
 |
be40d7 |
for (size_t i = 0; i < aRowSizeBytes; i += 4)
|
|
 |
be40d7 |
{
|
|
 |
be40d7 |
sal_Int8 alpha = pRow[i + 3];
|
|
 |
be40d7 |
+ if (alphaFirst)
|
|
 |
be40d7 |
+ {
|
|
 |
be40d7 |
+ pScanline[iColor++] = alpha;
|
|
 |
be40d7 |
+ }
|
|
 |
be40d7 |
pScanline[iColor++] = vcl::bitmap::premultiply(pRow[i + 0], alpha);
|
|
 |
be40d7 |
pScanline[iColor++] = vcl::bitmap::premultiply(pRow[i + 1], alpha);
|
|
 |
be40d7 |
pScanline[iColor++] = vcl::bitmap::premultiply(pRow[i + 2], alpha);
|
|
 |
be40d7 |
- pScanline[iColor++] = alpha;
|
|
 |
be40d7 |
+ if (!alphaFirst)
|
|
 |
be40d7 |
+ {
|
|
 |
be40d7 |
+ pScanline[iColor++] = alpha;
|
|
 |
be40d7 |
+ }
|
|
 |
be40d7 |
}
|
|
 |
be40d7 |
}
|
|
 |
be40d7 |
}
|
|
 |
be40d7 |
--
|
|
 |
be40d7 |
2.33.1
|
|
 |
be40d7 |
|