vcl/headless/CairoCommon.cxx             |   30 +++++------
 vcl/source/bitmap/BitmapTools.cxx        |   78 +++++++++++++++----------------
 vcl/source/filter/png/PngImageReader.cxx |   12 ++--
 3 files changed, 60 insertions(+), 60 deletions(-)

New commits:
commit 92067587039473db38b139ecb56a3c64544e975b
Author:     Armin Le Grand (allotropia) <[email protected]>
AuthorDate: Thu Sep 19 20:25:18 2024 +0200
Commit:     Armin Le Grand <[email protected]>
CommitDate: Fri Sep 20 11:00:00 2024 +0200

    Correct usage of premultiply for ENABLE_WASM_STRIP_PREMULTIPLY
    
    The order of parameters for vcl::bitmap::premultiply and
    vcl::bitmap::unpremultiply was wrong because when doing
    that I just used the same order that the indexing that was
    to be replaced used it. Corrected that.
    
    Change-Id: I59473acca8afdc58105b3381d1fdcedd6c0fd83b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173683
    Reviewed-by: Armin Le Grand <[email protected]>
    Reviewed-by: Caolán McNamara <[email protected]>
    Tested-by: Jenkins

diff --git a/vcl/headless/CairoCommon.cxx b/vcl/headless/CairoCommon.cxx
index 163007e46823..f72046ddda53 100644
--- a/vcl/headless/CairoCommon.cxx
+++ b/vcl/headless/CairoCommon.cxx
@@ -558,15 +558,15 @@ void CairoCommon::doXorOnRelease(sal_Int32 nExtentsLeft, 
sal_Int32 nExtentsTop,
             sal_uInt8 a = true_data[SVP_CAIRO_ALPHA];
             sal_uInt8 xor_a = xor_data[SVP_CAIRO_ALPHA];
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-            sal_uInt8 b = vcl::bitmap::unpremultiply(a, 
true_data[SVP_CAIRO_BLUE])
-                          ^ vcl::bitmap::unpremultiply(xor_a, 
xor_data[SVP_CAIRO_BLUE]);
-            sal_uInt8 g = vcl::bitmap::unpremultiply(a, 
true_data[SVP_CAIRO_GREEN])
-                          ^ vcl::bitmap::unpremultiply(xor_a, 
xor_data[SVP_CAIRO_GREEN]);
-            sal_uInt8 r = vcl::bitmap::unpremultiply(a, 
true_data[SVP_CAIRO_RED])
-                          ^ vcl::bitmap::unpremultiply(xor_a, 
xor_data[SVP_CAIRO_RED]);
-            true_data[SVP_CAIRO_BLUE] = vcl::bitmap::premultiply(a, b);
-            true_data[SVP_CAIRO_GREEN] = vcl::bitmap::premultiply(a, g);
-            true_data[SVP_CAIRO_RED] = vcl::bitmap::premultiply(a, r);
+            sal_uInt8 b = 
vcl::bitmap::unpremultiply(true_data[SVP_CAIRO_BLUE], a)
+                          ^ 
vcl::bitmap::unpremultiply(xor_data[SVP_CAIRO_BLUE], xor_a);
+            sal_uInt8 g = 
vcl::bitmap::unpremultiply(true_data[SVP_CAIRO_GREEN], a)
+                          ^ 
vcl::bitmap::unpremultiply(xor_data[SVP_CAIRO_GREEN], xor_a);
+            sal_uInt8 r = vcl::bitmap::unpremultiply(true_data[SVP_CAIRO_RED], 
a)
+                          ^ 
vcl::bitmap::unpremultiply(xor_data[SVP_CAIRO_RED], xor_a);
+            true_data[SVP_CAIRO_BLUE] = vcl::bitmap::premultiply(b, a);
+            true_data[SVP_CAIRO_GREEN] = vcl::bitmap::premultiply(g, a);
+            true_data[SVP_CAIRO_RED] = vcl::bitmap::premultiply(r, a);
 #else
             sal_uInt8 b = unpremultiply_table[a][true_data[SVP_CAIRO_BLUE]]
                           ^ 
unpremultiply_table[xor_a][xor_data[SVP_CAIRO_BLUE]];
@@ -731,9 +731,9 @@ Color CairoCommon::getPixel(cairo_surface_t* pSurface, 
tools::Long nX, tools::Lo
     unsigned char* data = cairo_image_surface_get_data(target);
     sal_uInt8 a = data[SVP_CAIRO_ALPHA];
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-    sal_uInt8 b = vcl::bitmap::unpremultiply(a, data[SVP_CAIRO_BLUE]);
-    sal_uInt8 g = vcl::bitmap::unpremultiply(a, data[SVP_CAIRO_GREEN]);
-    sal_uInt8 r = vcl::bitmap::unpremultiply(a, data[SVP_CAIRO_RED]);
+    sal_uInt8 b = vcl::bitmap::unpremultiply(data[SVP_CAIRO_BLUE], a);
+    sal_uInt8 g = vcl::bitmap::unpremultiply(data[SVP_CAIRO_GREEN], a);
+    sal_uInt8 r = vcl::bitmap::unpremultiply(data[SVP_CAIRO_RED], a);
 #else
     sal_uInt8 b = unpremultiply_table[a][data[SVP_CAIRO_BLUE]];
     sal_uInt8 g = unpremultiply_table[a][data[SVP_CAIRO_GREEN]];
@@ -1840,9 +1840,9 @@ void CairoCommon::drawMask(const SalTwoRect& rTR, const 
SalBitmap& rSalBitmap, C
         {
             sal_uInt8 a = data[SVP_CAIRO_ALPHA];
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-            sal_uInt8 b = vcl::bitmap::unpremultiply(a, data[SVP_CAIRO_BLUE]);
-            sal_uInt8 g = vcl::bitmap::unpremultiply(a, data[SVP_CAIRO_GREEN]);
-            sal_uInt8 r = vcl::bitmap::unpremultiply(a, data[SVP_CAIRO_RED]);
+            sal_uInt8 b = vcl::bitmap::unpremultiply(data[SVP_CAIRO_BLUE], a);
+            sal_uInt8 g = vcl::bitmap::unpremultiply(data[SVP_CAIRO_GREEN], a);
+            sal_uInt8 r = vcl::bitmap::unpremultiply(data[SVP_CAIRO_RED], a);
 #else
             sal_uInt8 b = unpremultiply_table[a][data[SVP_CAIRO_BLUE]];
             sal_uInt8 g = unpremultiply_table[a][data[SVP_CAIRO_GREEN]];
diff --git a/vcl/source/bitmap/BitmapTools.cxx 
b/vcl/source/bitmap/BitmapTools.cxx
index 3fa06d54019a..75462f0a8999 100644
--- a/vcl/source/bitmap/BitmapTools.cxx
+++ b/vcl/source/bitmap/BitmapTools.cxx
@@ -375,9 +375,9 @@ BitmapEx* CreateFromCairoSurface(Size aSize, 
cairo_surface_t * pSurface)
             {
                 // Cairo uses pre-multiplied alpha - we do not => re-multiply
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                nR = vcl::bitmap::unpremultiply(nAlpha, nR);
-                nG = vcl::bitmap::unpremultiply(nAlpha, nG);
-                nB = vcl::bitmap::unpremultiply(nAlpha, nB);
+                nR = vcl::bitmap::unpremultiply(nR, nAlpha);
+                nG = vcl::bitmap::unpremultiply(nG, nAlpha);
+                nB = vcl::bitmap::unpremultiply(nB, nAlpha);
 #else
                 nR = unpremultiply_table[nAlpha][nR];
                 nG = unpremultiply_table[nAlpha][nG];
@@ -781,9 +781,9 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, 
Bitmap & aBitmap, un
 
 #ifdef OSL_BIGENDIAN
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
aColor.GetRed());
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
aColor.GetGreen());
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
aColor.GetBlue());
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetRed(), 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetGreen(), 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetBlue(), 
nAlpha);
 #else
                 data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetRed()];
                 data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetGreen()];
@@ -791,9 +791,9 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, 
Bitmap & aBitmap, un
 #endif
 #else
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
aColor.GetBlue());
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
aColor.GetGreen());
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
aColor.GetRed());
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetBlue(), 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetGreen(), 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetRed(), 
nAlpha);
 #else
                 data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetBlue()];
                 data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetGreen()];
@@ -817,9 +817,9 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, 
Bitmap & aBitmap, un
                 else
                     nAlpha = data[ nOff ] = 255;
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                data[ nOff + 3 ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
-                data[ nOff + 2 ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
-                data[ nOff + 1 ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
+                data[ nOff + 3 ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff + 2 ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff + 1 ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
 #else
                 data[ nOff + 3 ] = premultiply_table[nAlpha][*pReadScan++];
                 data[ nOff + 2 ] = premultiply_table[nAlpha][*pReadScan++];
@@ -832,9 +832,9 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, 
Bitmap & aBitmap, un
                 else
                     nAlpha = data[ nOff + 3 ] = 255;
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
 #else
                 data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
                 data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
@@ -858,9 +858,9 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, 
Bitmap & aBitmap, un
                 else
                     nAlpha = data[ nOff++ ] = 255;
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
 #else
                 data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
                 data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
@@ -872,9 +872,9 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, 
Bitmap & aBitmap, un
                 else
                     nAlpha = data[ nOff + 3 ] = 255;
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, pReadScan[ 2 
]);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, pReadScan[ 1 
]);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, pReadScan[ 0 
]);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 2 ], 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 1 ], 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 0 ], 
nAlpha);
 #else
                 data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 2 ]];
                 data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 1 ]];
@@ -899,9 +899,9 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, 
Bitmap & aBitmap, un
                 else
                     nAlpha = data[ nOff++ ] = 255;
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, pReadScan[ 2 
]);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, pReadScan[ 1 
]);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, pReadScan[ 0 
]);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 2 ], 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 1 ], 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 0 ], 
nAlpha);
 #else
                 data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 2 ]];
                 data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 1 ]];
@@ -914,9 +914,9 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, 
Bitmap & aBitmap, un
                 else
                     nAlpha = data[ nOff + 3 ] = 255;
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
 #else
                 data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
                 data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
@@ -941,9 +941,9 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, 
Bitmap & aBitmap, un
                 else
                     nAlpha = data[ nOff ++ ] = 255;
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
*pReadScan++);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(*pReadScan++, 
nAlpha);
 #else
                 data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
                 data[ nOff++ ] = premultiply_table[nAlpha][*pReadScan++];
@@ -956,9 +956,9 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, 
Bitmap & aBitmap, un
                 else
                     nAlpha = data[ nOff + 3 ] = 255;
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, pReadScan[ 2 
]);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, pReadScan[ 1 
]);
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, pReadScan[ 0 
]);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 2 ], 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 1 ], 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(pReadScan[ 0 ], 
nAlpha);
 #else
                 data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 2 ]];
                 data[ nOff++ ] = premultiply_table[nAlpha][pReadScan[ 1 ]];
@@ -988,9 +988,9 @@ void CanvasCairoExtractBitmapData( BitmapEx const & aBmpEx, 
Bitmap & aBitmap, un
                 else
                     nAlpha = data[ nOff++ ] = 255;
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
aColor.GetRed());
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
aColor.GetGreen());
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
aColor.GetBlue());
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetRed(), 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetGreen(), 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetBlue(), 
nAlpha);
 #else
                 data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetRed()];
                 data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetGreen()];
@@ -1002,9 +1002,9 @@ void CanvasCairoExtractBitmapData( BitmapEx const & 
aBmpEx, Bitmap & aBitmap, un
                 else
                     nAlpha = data[ nOff + 3 ] = 255;
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
aColor.GetBlue());
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
aColor.GetGreen());
-                data[ nOff++ ] = vcl::bitmap::premultiply(nAlpha, 
aColor.GetRed());
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetBlue(), 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetGreen(), 
nAlpha);
+                data[ nOff++ ] = vcl::bitmap::premultiply(aColor.GetRed(), 
nAlpha);
 #else
                 data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetBlue()];
                 data[ nOff++ ] = premultiply_table[nAlpha][aColor.GetGreen()];
diff --git a/vcl/source/filter/png/PngImageReader.cxx 
b/vcl/source/filter/png/PngImageReader.cxx
index e64343dd0070..d52a13be4779 100644
--- a/vcl/source/filter/png/PngImageReader.cxx
+++ b/vcl/source/filter/png/PngImageReader.cxx
@@ -566,9 +566,9 @@ bool reader(SvStream& rStream, Graphic& rGraphic,
                     {
                         const sal_uInt8 alpha = pScanline[i + 3];
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                        pScanline[i + 3] = vcl::bitmap::premultiply(alpha, 
pScanline[i + 2]);
-                        pScanline[i + 2] = vcl::bitmap::premultiply(alpha, 
pScanline[i + 1]);
-                        pScanline[i + 1] = vcl::bitmap::premultiply(alpha, 
pScanline[i]);
+                        pScanline[i + 3] = 
vcl::bitmap::premultiply(pScanline[i + 2], alpha);
+                        pScanline[i + 2] = 
vcl::bitmap::premultiply(pScanline[i + 1], alpha);
+                        pScanline[i + 1] = 
vcl::bitmap::premultiply(pScanline[i], alpha);
 #else
                         pScanline[i + 3] = premultiply[alpha][pScanline[i + 
2]];
                         pScanline[i + 2] = premultiply[alpha][pScanline[i + 
1]];
@@ -587,9 +587,9 @@ bool reader(SvStream& rStream, Graphic& rGraphic,
                     {
                         const sal_uInt8 alpha = pScanline[i + 3];
 #if ENABLE_WASM_STRIP_PREMULTIPLY
-                        pScanline[i] = vcl::bitmap::premultiply(alpha, 
pScanline[i]);
-                        pScanline[i + 1] = vcl::bitmap::premultiply(alpha, 
pScanline[i + 1]);
-                        pScanline[i + 2] = vcl::bitmap::premultiply(alpha, 
pScanline[i + 2]);
+                        pScanline[i] = vcl::bitmap::premultiply(pScanline[i], 
alpha);
+                        pScanline[i + 1] = 
vcl::bitmap::premultiply(pScanline[i + 1], alpha);
+                        pScanline[i + 2] = 
vcl::bitmap::premultiply(pScanline[i + 2], alpha);
 #else
                         pScanline[i] = premultiply[alpha][pScanline[i]];
                         pScanline[i + 1] = premultiply[alpha][pScanline[i + 
1]];

Reply via email to