vcl/qa/cppunit/BitmapFilterTest.cxx |  933 +++++++++++++++++++++++++++++-------
 1 file changed, 754 insertions(+), 179 deletions(-)

New commits:
commit e8eceab01dffcacd147ac5451ec460064883f62b
Author:     Xisco Fauli <[email protected]>
AuthorDate: Fri Jan 16 14:17:58 2026 +0100
Commit:     Xisco Fauli <[email protected]>
CommitDate: Fri Jan 16 22:12:49 2026 +0100

    vcl_bitmapfilter_test: create objects on the stack
    
    as suggested by Tomaž in https://gerrit.libreoffice.org/c/core/+/197367
    
    Change-Id: Ifcdaa771c0f3c7335036e6c36ceb5feecd2a6052
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197451
    Reviewed-by: Tomaž Vajngerl <[email protected]>
    Tested-by: Jenkins

diff --git a/vcl/qa/cppunit/BitmapFilterTest.cxx 
b/vcl/qa/cppunit/BitmapFilterTest.cxx
index 0c3d6c4a4c3e..ec0ebdbf2226 100644
--- a/vcl/qa/cppunit/BitmapFilterTest.cxx
+++ b/vcl/qa/cppunit/BitmapFilterTest.cxx
@@ -432,26 +432,23 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testMultiplyBlendFilter_24_BPP)
 
     // same color
     {
-        BitmapMultiplyBlendFilter* pArithmeticFilter
-            = new BitmapMultiplyBlendFilter(aRedBitmap, aRedBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapMultiplyBlendFilter aMultiplyBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = aMultiplyBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapMultiplyBlendFilter* pArithmeticFilter
-            = new BitmapMultiplyBlendFilter(aRedBitmap, aGreenBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapMultiplyBlendFilter aMultiplyBlendFilter(aRedBitmap, 
aGreenBitmap);
+        Bitmap aResBitmap = aMultiplyBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x00, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // transparent
     {
-        BitmapMultiplyBlendFilter* pArithmeticFilter
-            = new BitmapMultiplyBlendFilter(aRedBitmap, aTransparentBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapMultiplyBlendFilter aMultiplyBlendFilter(aRedBitmap, 
aTransparentBitmap);
+        Bitmap aResBitmap = aMultiplyBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
@@ -482,26 +479,23 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testMultiplyBlendFilter_32_BPP)
 
     // same color
     {
-        BitmapMultiplyBlendFilter* pArithmeticFilter
-            = new BitmapMultiplyBlendFilter(aRedBitmap, aRedBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapMultiplyBlendFilter aMultiplyBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = aMultiplyBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapMultiplyBlendFilter* pArithmeticFilter
-            = new BitmapMultiplyBlendFilter(aRedBitmap, aGreenBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapMultiplyBlendFilter aMultiplyBlendFilter(aRedBitmap, 
aGreenBitmap);
+        Bitmap aResBitmap = aMultiplyBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x00, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // transparent
     {
-        BitmapMultiplyBlendFilter* pArithmeticFilter
-            = new BitmapMultiplyBlendFilter(aRedBitmap, aTransparentBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapMultiplyBlendFilter aMultiplyBlendFilter(aRedBitmap, 
aTransparentBitmap);
+        Bitmap aResBitmap = aMultiplyBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
@@ -532,26 +526,23 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testNormalBlendFilter_24_BPP)
 
     // same color
     {
-        BitmapNormalBlendFilter* pArithmeticFilter
-            = new BitmapNormalBlendFilter(aRedBitmap, aRedBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapNormalBlendFilter aNormalBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = aNormalBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapNormalBlendFilter* pArithmeticFilter
-            = new BitmapNormalBlendFilter(aRedBitmap, aGreenBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapNormalBlendFilter aNormalBlendFilter(aRedBitmap, aGreenBitmap);
+        Bitmap aResBitmap = aNormalBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // transparent
     {
-        BitmapNormalBlendFilter* pArithmeticFilter
-            = new BitmapNormalBlendFilter(aRedBitmap, aTransparentBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapNormalBlendFilter aNormalBlendFilter(aRedBitmap, 
aTransparentBitmap);
+        Bitmap aResBitmap = aNormalBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
@@ -582,26 +573,23 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testNormalBlendFilter_32_BPP)
 
     // same color
     {
-        BitmapNormalBlendFilter* pArithmeticFilter
-            = new BitmapNormalBlendFilter(aRedBitmap, aRedBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapNormalBlendFilter aNormalBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = aNormalBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapNormalBlendFilter* pArithmeticFilter
-            = new BitmapNormalBlendFilter(aRedBitmap, aGreenBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapNormalBlendFilter aNormalBlendFilter(aRedBitmap, aGreenBitmap);
+        Bitmap aResBitmap = aNormalBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // transparent
     {
-        BitmapNormalBlendFilter* pArithmeticFilter
-            = new BitmapNormalBlendFilter(aRedBitmap, aTransparentBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapNormalBlendFilter aNormalBlendFilter(aRedBitmap, 
aTransparentBitmap);
+        Bitmap aResBitmap = aNormalBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
@@ -726,26 +714,23 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testLightenBlendFilter_24_BPP)
 
     // same color
     {
-        BitmapLightenBlendFilter* pArithmeticFilter
-            = new BitmapLightenBlendFilter(aRedBitmap, aRedBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapLightenBlendFilter aLightenBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = aLightenBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapLightenBlendFilter* pArithmeticFilter
-            = new BitmapLightenBlendFilter(aRedBitmap, aGreenBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapLightenBlendFilter aLightenBlendFilter(aRedBitmap, aGreenBitmap);
+        Bitmap aResBitmap = aLightenBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x80, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // transparent
     {
-        BitmapLightenBlendFilter* pArithmeticFilter
-            = new BitmapLightenBlendFilter(aRedBitmap, aTransparentBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapLightenBlendFilter aLightenBlendFilter(aRedBitmap, 
aTransparentBitmap);
+        Bitmap aResBitmap = aLightenBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0xFF, 0xFF),
                              aResBitmap.GetPixelColor(2, 2));
     }
@@ -776,26 +761,23 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testLightenBlendFilter_32_BPP)
 
     // same color
     {
-        BitmapLightenBlendFilter* pArithmeticFilter
-            = new BitmapLightenBlendFilter(aRedBitmap, aRedBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapLightenBlendFilter aLightenBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = aLightenBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapLightenBlendFilter* pArithmeticFilter
-            = new BitmapLightenBlendFilter(aRedBitmap, aGreenBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapLightenBlendFilter aLightenBlendFilter(aRedBitmap, aGreenBitmap);
+        Bitmap aResBitmap = aLightenBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x80, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // transparent
     {
-        BitmapLightenBlendFilter* pArithmeticFilter
-            = new BitmapLightenBlendFilter(aRedBitmap, aTransparentBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapLightenBlendFilter aLightenBlendFilter(aRedBitmap, 
aTransparentBitmap);
+        Bitmap aResBitmap = aLightenBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
@@ -826,26 +808,23 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testScreenBlendFilter_24_BPP)
 
     // same color
     {
-        BitmapScreenBlendFilter* pArithmeticFilter
-            = new BitmapScreenBlendFilter(aRedBitmap, aRedBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapScreenBlendFilter aScreenBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = aScreenBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapScreenBlendFilter* pArithmeticFilter
-            = new BitmapScreenBlendFilter(aRedBitmap, aGreenBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapScreenBlendFilter aScreenBlendFilter(aRedBitmap, aGreenBitmap);
+        Bitmap aResBitmap = aScreenBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x80, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // transparent
     {
-        BitmapScreenBlendFilter* pArithmeticFilter
-            = new BitmapScreenBlendFilter(aRedBitmap, aTransparentBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapScreenBlendFilter aScreenBlendFilter(aRedBitmap, 
aTransparentBitmap);
+        Bitmap aResBitmap = aScreenBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0xFF, 0xFF),
                              aResBitmap.GetPixelColor(2, 2));
     }
@@ -876,26 +855,23 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testScreenBlendFilter_32_BPP)
 
     // same color
     {
-        BitmapScreenBlendFilter* pArithmeticFilter
-            = new BitmapScreenBlendFilter(aRedBitmap, aRedBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapScreenBlendFilter aScreenBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = aScreenBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapScreenBlendFilter* pArithmeticFilter
-            = new BitmapScreenBlendFilter(aRedBitmap, aGreenBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapScreenBlendFilter aScreenBlendFilter(aRedBitmap, aGreenBitmap);
+        Bitmap aResBitmap = aScreenBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x80, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // transparent
     {
-        BitmapScreenBlendFilter* pArithmeticFilter
-            = new BitmapScreenBlendFilter(aRedBitmap, aTransparentBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapScreenBlendFilter aScreenBlendFilter(aRedBitmap, 
aTransparentBitmap);
+        Bitmap aResBitmap = aScreenBlendFilter.execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
@@ -1374,102 +1350,102 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testDuoToneFilter_24_BPP)
 
     // same color
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new BitmapDuoToneFilter(COL_RED, 
COL_RED);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_RED, COL_RED);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x7F, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_GREEN, COL_GREEN);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_GREEN, COL_GREEN);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x00, 0x7F, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_AUTO, COL_AUTO);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_AUTO, COL_AUTO);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0xFF, 0xFF),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_GREEN, COL_RED);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_GREEN, COL_RED);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x25, 0x5A, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new BitmapDuoToneFilter(COL_RED, 
COL_GREEN);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_RED, COL_GREEN);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x5A, 0x25, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new BitmapDuoToneFilter(COL_RED, 
COL_AUTO);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_RED, COL_AUTO);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xA5, 0x4B, 0x4B),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_AUTO, COL_RED);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_AUTO, COL_RED);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xD9, 0xB4, 0xB4),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // same color
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new BitmapDuoToneFilter(COL_RED, 
COL_RED);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_RED, COL_RED);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x80, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_GREEN, COL_GREEN);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_GREEN, COL_GREEN);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x00, 0x80, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_AUTO, COL_AUTO);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_AUTO, COL_AUTO);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0xFF, 0xFF),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_GREEN, COL_RED);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_GREEN, COL_RED);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x80, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new BitmapDuoToneFilter(COL_RED, 
COL_GREEN);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_RED, COL_GREEN);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x00, 0x80, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new BitmapDuoToneFilter(COL_RED, 
COL_AUTO);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_RED, COL_AUTO);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0xFF, 0xFF),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_AUTO, COL_RED);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_AUTO, COL_RED);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x80, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
@@ -1494,102 +1470,102 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testDuoToneFilter_32_BPP)
 
     // same color
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new BitmapDuoToneFilter(COL_RED, 
COL_RED);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_RED, COL_RED);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x7F, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_GREEN, COL_GREEN);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_GREEN, COL_GREEN);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x00, 0x7F, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_AUTO, COL_AUTO);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_AUTO, COL_AUTO);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0xFF, 0xFF),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_GREEN, COL_RED);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_GREEN, COL_RED);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x25, 0x5A, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new BitmapDuoToneFilter(COL_RED, 
COL_GREEN);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_RED, COL_GREEN);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x5A, 0x25, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new BitmapDuoToneFilter(COL_RED, 
COL_AUTO);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_RED, COL_AUTO);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xA5, 0x4B, 0x4B),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_AUTO, COL_RED);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aRedBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_AUTO, COL_RED);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xD9, 0xB4, 0xB4),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // same color
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new BitmapDuoToneFilter(COL_RED, 
COL_RED);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_RED, COL_RED);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_GREEN, COL_GREEN);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_GREEN, COL_GREEN);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_AUTO, COL_AUTO);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_AUTO, COL_AUTO);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_GREEN, COL_RED);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_GREEN, COL_RED);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new BitmapDuoToneFilter(COL_RED, 
COL_GREEN);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_RED, COL_GREEN);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new BitmapDuoToneFilter(COL_RED, 
COL_AUTO);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_RED, COL_AUTO);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     {
-        BitmapDuoToneFilter* pDuoToneFilter = new 
BitmapDuoToneFilter(COL_AUTO, COL_RED);
-        Bitmap aResBitmap = pDuoToneFilter->execute(aTransparentBitmap);
+        BitmapDuoToneFilter aDuoToneFilter(COL_AUTO, COL_RED);
+        Bitmap aResBitmap = aDuoToneFilter.execute(aTransparentBitmap);
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
commit bba5522ea8026a4f0868e343c54373761e4bc208
Author:     Xisco Fauli <[email protected]>
AuthorDate: Fri Jan 16 11:41:58 2026 +0100
Commit:     Xisco Fauli <[email protected]>
CommitDate: Fri Jan 16 22:12:42 2026 +0100

    vcl_bitmapfilter_test: duplicate tests for 32-bit bitmap
    
    Change-Id: I4683ff58de94f8ab62e2b941ecad70e56118456a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/197438
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <[email protected]>

diff --git a/vcl/qa/cppunit/BitmapFilterTest.cxx 
b/vcl/qa/cppunit/BitmapFilterTest.cxx
index bf34354862ed..0c3d6c4a4c3e 100644
--- a/vcl/qa/cppunit/BitmapFilterTest.cxx
+++ b/vcl/qa/cppunit/BitmapFilterTest.cxx
@@ -67,7 +67,7 @@ protected:
     }
 };
 
-CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testClampAlpha)
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testClampAlpha_24_BPP)
 {
     // Setup test bitmap
     Size aSize(1, 1);
@@ -82,7 +82,22 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testClampAlpha)
     CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt8>(0xFF), 
aBitmap24Bit.GetPixelColor(0, 0).GetAlpha());
 }
 
-CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testBlurCorrectness)
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testClampAlpha_32_BPP)
+{
+    // Setup test bitmap
+    Size aSize(1, 1);
+    Bitmap aBitmap32Bit(aSize, vcl::PixelFormat::N32_BPP);
+
+    {
+        BitmapScopedWriteAccess aWriteAccess(aBitmap32Bit);
+        aWriteAccess->Erase(COL_RED);
+    }
+
+    BitmapFilter::Filter(aBitmap32Bit, BitmapAlphaClampFilter(0x7F));
+    CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt8>(0xFF), 
aBitmap32Bit.GetPixelColor(0, 0).GetAlpha());
+}
+
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testBlurCorrectness_24_BPP)
 {
     // Setup test bitmap
     Size aSize(41, 31);
@@ -144,6 +159,68 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testBlurCorrectness)
     }
 }
 
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testBlurCorrectness_32_BPP)
+{
+    // Setup test bitmap
+    Size aSize(41, 31);
+    Bitmap aBitmap32Bit(aSize, vcl::PixelFormat::N32_BPP);
+
+    ScanlineFormat scanlineFormat = ScanlineFormat::NONE;
+    auto ePixelFormat = aBitmap32Bit.getPixelFormat();
+
+    {
+        tools::Long aMargin1 = 1;
+        tools::Long aMargin2 = 3;
+        BitmapScopedWriteAccess aWriteAccess(aBitmap32Bit);
+        scanlineFormat = aWriteAccess->GetScanlineFormat();
+        aWriteAccess->Erase(COL_WHITE);
+        aWriteAccess->SetLineColor(COL_BLACK);
+
+        tools::Rectangle aRectangle1(aMargin1, aMargin1, aSize.Width() - 1 - 
aMargin1,
+                                     aSize.Height() - 1 - aMargin1);
+
+        tools::Rectangle aRectangle2(aMargin2, aMargin2, aSize.Width() - 1 - 
aMargin2,
+                                     aSize.Height() - 1 - aMargin2);
+
+        tools::Rectangle aRectangle3(aSize.Width() / 2, aSize.Height() / 2, 
aSize.Width() / 2,
+                                     aSize.Height() / 2);
+
+        aWriteAccess->DrawRect(aRectangle1);
+        aWriteAccess->DrawRect(aRectangle2);
+        aWriteAccess->DrawRect(aRectangle3);
+    }
+
+    if (constWriteResultBitmap)
+    {
+        savePNG(u"~/blurBefore.png"_ustr, aBitmap32Bit);
+    }
+
+    // Perform blur
+    BitmapFilterStackBlur aBlurFilter(2);
+    aBitmap32Bit = aBlurFilter.execute(aBitmap32Bit);
+
+    // Check the result
+
+    if (constWriteResultBitmap)
+    {
+        savePNG(u"~/blurAfter.png"_ustr, aBitmap32Bit);
+    }
+
+    // Check blurred bitmap parameters
+    CPPUNIT_ASSERT_EQUAL(static_cast<tools::Long>(41), 
aBitmap32Bit.GetSizePixel().Width());
+    CPPUNIT_ASSERT_EQUAL(static_cast<tools::Long>(31), 
aBitmap32Bit.GetSizePixel().Height());
+
+    CPPUNIT_ASSERT_EQUAL(ePixelFormat, aBitmap32Bit.getPixelFormat());
+
+    // Check that the bitmap is horizontally and vertically symmetrical
+    CPPUNIT_ASSERT(BitmapSymmetryCheck::check(aBitmap32Bit));
+
+    {
+        BitmapScopedReadAccess aReadAccess(aBitmap32Bit);
+        CPPUNIT_ASSERT_EQUAL(scanlineFormat, aReadAccess->GetScanlineFormat());
+    }
+}
+
 CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testBasicMorphology)
 {
     const Bitmap aOrigBitmap = loadBitmap(u"testBasicMorphology.png");
@@ -173,7 +250,7 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testBasicMorphology)
     CPPUNIT_ASSERT_EQUAL(aRefBitmapDilated2Eroded1.GetChecksum(), 
aTransformBitmap.GetChecksum());
 }
 
-CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testPerformance)
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testPerformance_24_BPP)
 {
     if (!constEnablePerformanceTest)
         return;
@@ -220,6 +297,53 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testPerformance)
     }
 }
 
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testPerformance_32_BPP)
+{
+    if (!constEnablePerformanceTest)
+        return;
+
+    Size aSize(4000, 3000); // A rather common picture size
+
+    // Prepare bitmap
+    Bitmap aBigBitmap(aSize, vcl::PixelFormat::N32_BPP);
+    {
+        tools::Long aMargin = 500;
+        BitmapScopedWriteAccess aWriteAccess(aBigBitmap);
+        aWriteAccess->Erase(COL_WHITE);
+        aWriteAccess->SetLineColor(COL_BLACK);
+        aWriteAccess->SetFillColor(COL_BLACK);
+        tools::Rectangle aRectangle(aMargin, aMargin, aSize.Width() - 1 - 
aMargin,
+                                    aSize.Height() - 1 - aMargin);
+
+        aWriteAccess->DrawRect(aRectangle);
+    }
+
+    int nIterations = 10;
+    auto start = std::chrono::high_resolution_clock::now();
+    Bitmap aResult;
+    for (int i = 0; i < nIterations; i++)
+    {
+        BitmapFilterStackBlur aBlurFilter(250);
+        aResult = aBlurFilter.execute(aBigBitmap);
+    }
+    auto end = std::chrono::high_resolution_clock::now();
+    auto elapsed = (end - start) / nIterations;
+
+    if (constWriteResultBitmap)
+    {
+        std::unique_ptr<SvFileStream> pStream(new SvFileStream(
+            u"~/BlurBigPerformance.png"_ustr, StreamMode::WRITE | 
StreamMode::TRUNC));
+        GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter();
+        rFilter.compressAsPNG(aResult, *pStream);
+
+        pStream.reset(new SvFileStream(u"~/BlurBigPerformance.txt"_ustr, 
StreamMode::WRITE));
+        pStream->WriteOString("Blur average time: ");
+        pStream->WriteOString(OString::number(
+            
std::chrono::duration_cast<std::chrono::milliseconds>(elapsed).count()));
+        pStream->WriteOString("
");
+    }
+}
+
 CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testGenerateStripRanges)
 {
     {
@@ -283,7 +407,7 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testGenerateStripRanges)
     }
 }
 
-CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testMultiplyBlendFilter)
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testMultiplyBlendFilter_24_BPP)
 {
     Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
     CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aRedBitmap.getPixelFormat());
@@ -333,7 +457,57 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testMultiplyBlendFilter)
     }
 }
 
-CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testNormalBlendFilter)
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testMultiplyBlendFilter_32_BPP)
+{
+    Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aRedBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aRedBitmap);
+        aWriteAccess->Erase(COL_LIGHTRED);
+    }
+
+    Bitmap aGreenBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aGreenBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aGreenBitmap);
+        aWriteAccess->Erase(COL_GREEN);
+    }
+
+    Bitmap aTransparentBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aTransparentBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aTransparentBitmap);
+        aWriteAccess->Erase(COL_AUTO);
+    }
+
+    // same color
+    {
+        BitmapMultiplyBlendFilter* pArithmeticFilter
+            = new BitmapMultiplyBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
+    }
+
+    // different color
+    {
+        BitmapMultiplyBlendFilter* pArithmeticFilter
+            = new BitmapMultiplyBlendFilter(aRedBitmap, aGreenBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x00, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(2, 2));
+    }
+
+    // transparent
+    {
+        BitmapMultiplyBlendFilter* pArithmeticFilter
+            = new BitmapMultiplyBlendFilter(aRedBitmap, aTransparentBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(2, 2));
+    }
+}
+
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testNormalBlendFilter_24_BPP)
 {
     Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
     CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aRedBitmap.getPixelFormat());
@@ -383,7 +557,57 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testNormalBlendFilter)
     }
 }
 
-CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testDarkenBlendFilter)
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testNormalBlendFilter_32_BPP)
+{
+    Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aRedBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aRedBitmap);
+        aWriteAccess->Erase(COL_LIGHTRED);
+    }
+
+    Bitmap aGreenBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aGreenBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aGreenBitmap);
+        aWriteAccess->Erase(COL_GREEN);
+    }
+
+    Bitmap aTransparentBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aTransparentBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aTransparentBitmap);
+        aWriteAccess->Erase(COL_AUTO);
+    }
+
+    // same color
+    {
+        BitmapNormalBlendFilter* pArithmeticFilter
+            = new BitmapNormalBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
+    }
+
+    // different color
+    {
+        BitmapNormalBlendFilter* pArithmeticFilter
+            = new BitmapNormalBlendFilter(aRedBitmap, aGreenBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(2, 2));
+    }
+
+    // transparent
+    {
+        BitmapNormalBlendFilter* pArithmeticFilter
+            = new BitmapNormalBlendFilter(aRedBitmap, aTransparentBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(2, 2));
+    }
+}
+
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testDarkenBlendFilter_24_BPP)
 {
     Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
     CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aRedBitmap.getPixelFormat());
@@ -430,24 +654,24 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testDarkenBlendFilter)
     }
 }
 
-CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testLightenBlendFilter)
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testDarkenBlendFilter_32_BPP)
 {
-    Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
-    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aRedBitmap.getPixelFormat());
+    Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aRedBitmap.getPixelFormat());
     {
         BitmapScopedWriteAccess aWriteAccess(aRedBitmap);
         aWriteAccess->Erase(COL_LIGHTRED);
     }
 
-    Bitmap aGreenBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
-    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aGreenBitmap.getPixelFormat());
+    Bitmap aGreenBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aGreenBitmap.getPixelFormat());
     {
         BitmapScopedWriteAccess aWriteAccess(aGreenBitmap);
         aWriteAccess->Erase(COL_GREEN);
     }
 
-    Bitmap aTransparentBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
-    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aTransparentBitmap.getPixelFormat());
+    Bitmap aTransparentBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aTransparentBitmap.getPixelFormat());
     {
         BitmapScopedWriteAccess aWriteAccess(aTransparentBitmap);
         aWriteAccess->Erase(COL_AUTO);
@@ -455,32 +679,29 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testLightenBlendFilter)
 
     // same color
     {
-        BitmapLightenBlendFilter* pArithmeticFilter
-            = new BitmapLightenBlendFilter(aRedBitmap, aRedBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
+        BitmapDarkenBlendFilter aArithmeticFilter(aRedBitmap);
+        Bitmap aResBitmap = aArithmeticFilter.execute(aRedBitmap);
         CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapLightenBlendFilter* pArithmeticFilter
-            = new BitmapLightenBlendFilter(aRedBitmap, aGreenBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
-        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x80, 0x00),
+        BitmapDarkenBlendFilter aArithmeticFilter(aGreenBitmap);
+        Bitmap aResBitmap = aArithmeticFilter.execute(aRedBitmap);
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0x00, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 
     // transparent
     {
-        BitmapLightenBlendFilter* pArithmeticFilter
-            = new BitmapLightenBlendFilter(aRedBitmap, aTransparentBitmap);
-        Bitmap aResBitmap = pArithmeticFilter->execute();
-        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0xFF, 0xFF),
+        BitmapDarkenBlendFilter aArithmeticFilter(aTransparentBitmap);
+        Bitmap aResBitmap = aArithmeticFilter.execute(aRedBitmap);
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
     }
 }
 
-CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testScreenBlendFilter)
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testLightenBlendFilter_24_BPP)
 {
     Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
     CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aRedBitmap.getPixelFormat());
@@ -505,16 +726,16 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testScreenBlendFilter)
 
     // same color
     {
-        BitmapScreenBlendFilter* pArithmeticFilter
-            = new BitmapScreenBlendFilter(aRedBitmap, aRedBitmap);
+        BitmapLightenBlendFilter* pArithmeticFilter
+            = new BitmapLightenBlendFilter(aRedBitmap, aRedBitmap);
         Bitmap aResBitmap = pArithmeticFilter->execute();
         CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
     }
 
     // different color
     {
-        BitmapScreenBlendFilter* pArithmeticFilter
-            = new BitmapScreenBlendFilter(aRedBitmap, aGreenBitmap);
+        BitmapLightenBlendFilter* pArithmeticFilter
+            = new BitmapLightenBlendFilter(aRedBitmap, aGreenBitmap);
         Bitmap aResBitmap = pArithmeticFilter->execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x80, 0x00),
                              aResBitmap.GetPixelColor(2, 2));
@@ -522,32 +743,32 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testScreenBlendFilter)
 
     // transparent
     {
-        BitmapScreenBlendFilter* pArithmeticFilter
-            = new BitmapScreenBlendFilter(aRedBitmap, aTransparentBitmap);
+        BitmapLightenBlendFilter* pArithmeticFilter
+            = new BitmapLightenBlendFilter(aRedBitmap, aTransparentBitmap);
         Bitmap aResBitmap = pArithmeticFilter->execute();
         CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0xFF, 0xFF),
                              aResBitmap.GetPixelColor(2, 2));
     }
 }
 
-CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testArithmeticBlendFilter)
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testLightenBlendFilter_32_BPP)
 {
-    Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
-    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aRedBitmap.getPixelFormat());
+    Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aRedBitmap.getPixelFormat());
     {
         BitmapScopedWriteAccess aWriteAccess(aRedBitmap);
         aWriteAccess->Erase(COL_LIGHTRED);
     }
 
-    Bitmap aGreenBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
-    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aGreenBitmap.getPixelFormat());
+    Bitmap aGreenBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aGreenBitmap.getPixelFormat());
     {
         BitmapScopedWriteAccess aWriteAccess(aGreenBitmap);
         aWriteAccess->Erase(COL_GREEN);
     }
 
-    Bitmap aTransparentBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
-    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aTransparentBitmap.getPixelFormat());
+    Bitmap aTransparentBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aTransparentBitmap.getPixelFormat());
     {
         BitmapScopedWriteAccess aWriteAccess(aTransparentBitmap);
         aWriteAccess->Erase(COL_AUTO);
@@ -555,12 +776,162 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testArithmeticBlendFilter)
 
     // same color
     {
-        Bitmap aResBitmap(aRedBitmap);
-        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aRedBitmap, 0, 0, 0, 0));
-
-        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
-                             aResBitmap.GetPixelColor(0, 0));
-    }
+        BitmapLightenBlendFilter* pArithmeticFilter
+            = new BitmapLightenBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
+    }
+
+    // different color
+    {
+        BitmapLightenBlendFilter* pArithmeticFilter
+            = new BitmapLightenBlendFilter(aRedBitmap, aGreenBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x80, 0x00),
+                             aResBitmap.GetPixelColor(2, 2));
+    }
+
+    // transparent
+    {
+        BitmapLightenBlendFilter* pArithmeticFilter
+            = new BitmapLightenBlendFilter(aRedBitmap, aTransparentBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(2, 2));
+    }
+}
+
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testScreenBlendFilter_24_BPP)
+{
+    Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aRedBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aRedBitmap);
+        aWriteAccess->Erase(COL_LIGHTRED);
+    }
+
+    Bitmap aGreenBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aGreenBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aGreenBitmap);
+        aWriteAccess->Erase(COL_GREEN);
+    }
+
+    Bitmap aTransparentBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aTransparentBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aTransparentBitmap);
+        aWriteAccess->Erase(COL_AUTO);
+    }
+
+    // same color
+    {
+        BitmapScreenBlendFilter* pArithmeticFilter
+            = new BitmapScreenBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
+    }
+
+    // different color
+    {
+        BitmapScreenBlendFilter* pArithmeticFilter
+            = new BitmapScreenBlendFilter(aRedBitmap, aGreenBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x80, 0x00),
+                             aResBitmap.GetPixelColor(2, 2));
+    }
+
+    // transparent
+    {
+        BitmapScreenBlendFilter* pArithmeticFilter
+            = new BitmapScreenBlendFilter(aRedBitmap, aTransparentBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0xFF, 0xFF),
+                             aResBitmap.GetPixelColor(2, 2));
+    }
+}
+
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testScreenBlendFilter_32_BPP)
+{
+    Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aRedBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aRedBitmap);
+        aWriteAccess->Erase(COL_LIGHTRED);
+    }
+
+    Bitmap aGreenBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aGreenBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aGreenBitmap);
+        aWriteAccess->Erase(COL_GREEN);
+    }
+
+    Bitmap aTransparentBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aTransparentBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aTransparentBitmap);
+        aWriteAccess->Erase(COL_AUTO);
+    }
+
+    // same color
+    {
+        BitmapScreenBlendFilter* pArithmeticFilter
+            = new BitmapScreenBlendFilter(aRedBitmap, aRedBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(2, 2));
+    }
+
+    // different color
+    {
+        BitmapScreenBlendFilter* pArithmeticFilter
+            = new BitmapScreenBlendFilter(aRedBitmap, aGreenBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x80, 0x00),
+                             aResBitmap.GetPixelColor(2, 2));
+    }
+
+    // transparent
+    {
+        BitmapScreenBlendFilter* pArithmeticFilter
+            = new BitmapScreenBlendFilter(aRedBitmap, aTransparentBitmap);
+        Bitmap aResBitmap = pArithmeticFilter->execute();
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(2, 2));
+    }
+}
+
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testArithmeticBlendFilter_24_BPP)
+{
+    Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aRedBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aRedBitmap);
+        aWriteAccess->Erase(COL_LIGHTRED);
+    }
+
+    Bitmap aGreenBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aGreenBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aGreenBitmap);
+        aWriteAccess->Erase(COL_GREEN);
+    }
+
+    Bitmap aTransparentBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N24_BPP, 
aTransparentBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aTransparentBitmap);
+        aWriteAccess->Erase(COL_AUTO);
+    }
+
+    // same color
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aRedBitmap, 0, 0, 0, 0));
+
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
 
     {
         Bitmap aResBitmap(aRedBitmap);
@@ -757,6 +1128,234 @@ CPPUNIT_TEST_FIXTURE(BitmapFilterTest, 
testArithmeticBlendFilter)
     }
 }
 
+CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testArithmeticBlendFilter_32_BPP)
+{
+    Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aRedBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aRedBitmap);
+        aWriteAccess->Erase(COL_LIGHTRED);
+    }
+
+    Bitmap aGreenBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aGreenBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aGreenBitmap);
+        aWriteAccess->Erase(COL_GREEN);
+    }
+
+    Bitmap aTransparentBitmap(Size(4, 4), vcl::PixelFormat::N32_BPP);
+    CPPUNIT_ASSERT_EQUAL(vcl::PixelFormat::N32_BPP, 
aTransparentBitmap.getPixelFormat());
+    {
+        BitmapScopedWriteAccess aWriteAccess(aTransparentBitmap);
+        aWriteAccess->Erase(COL_AUTO);
+    }
+
+    // same color
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aRedBitmap, 0, 0, 0, 0));
+
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aRedBitmap, 1, 0, 0, 0));
+        CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aRedBitmap, 0, 1, 0, 0));
+        CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aRedBitmap, 0, 0, 1, 0));
+        CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aRedBitmap, 0, 0, 0, 1));
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0xFF, 0xFF),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aRedBitmap, 0.5, 0, 0, 0));
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x7F, 0xFF, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aRedBitmap, 0, 0.5, 0, 0));
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x7F, 0xFF, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aRedBitmap, 0, 0, 0.5, 0));
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x7F, 0xFF, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aRedBitmap, 0, 0, 0, 0.5));
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x7F, 0xFF, 0xFF, 0xFF),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    // Different colors
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aGreenBitmap, 0, 0, 0, 0));
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aGreenBitmap, 1, 0, 0, 0));
+        CPPUNIT_ASSERT_EQUAL(COL_BLACK, aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aGreenBitmap, 0, 1, 0, 0));
+        CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aGreenBitmap, 0, 0, 1, 0));
+        CPPUNIT_ASSERT_EQUAL(COL_GREEN, aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aGreenBitmap, 0, 0, 0, 1));
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0xFF, 0xFF),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aGreenBitmap, 0.5, 0, 0, 0));
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x7F, 0x00, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aGreenBitmap, 0, 0.5, 0, 0));
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x7F, 0xFF, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aGreenBitmap, 0, 0, 0.5, 0));
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x7F, 0x00, 0x81, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap, 
BitmapArithmeticBlendFilter(aGreenBitmap, 0, 0, 0, 0.5));
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x7F, 0xFF, 0xFF, 0xFF),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    // transparent
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap,
+                             BitmapArithmeticBlendFilter(aTransparentBitmap, 
0, 0, 0, 0));
+
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap,
+                             BitmapArithmeticBlendFilter(aTransparentBitmap, 
1, 0, 0, 0));
+
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap,
+                             BitmapArithmeticBlendFilter(aTransparentBitmap, 
0, 1, 0, 0));
+
+        CPPUNIT_ASSERT_EQUAL(COL_LIGHTRED, aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap,
+                             BitmapArithmeticBlendFilter(aTransparentBitmap, 
0, 0, 1, 0));
+
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap,
+                             BitmapArithmeticBlendFilter(aTransparentBitmap, 
0, 0, 0, 1));
+
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0xFF, 0xFF, 0xFF, 0xFF),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap,
+                             BitmapArithmeticBlendFilter(aTransparentBitmap, 
0.5, 0, 0, 0));
+
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap,
+                             BitmapArithmeticBlendFilter(aTransparentBitmap, 
0, 0.5, 0, 0));
+
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x7F, 0xFF, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap,
+                             BitmapArithmeticBlendFilter(aTransparentBitmap, 
0, 0, 0.5, 0));
+
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x00, 0x00, 0x00, 0x00),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+
+    {
+        Bitmap aResBitmap(aRedBitmap);
+        BitmapFilter::Filter(aResBitmap,
+                             BitmapArithmeticBlendFilter(aTransparentBitmap, 
0, 0, 0, 0.5));
+
+        CPPUNIT_ASSERT_EQUAL(Color(ColorAlpha, 0x7F, 0xFF, 0xFF, 0xFF),
+                             aResBitmap.GetPixelColor(0, 0));
+    }
+}
+
 CPPUNIT_TEST_FIXTURE(BitmapFilterTest, testDuoToneFilter_24_BPP)
 {
     Bitmap aRedBitmap(Size(4, 4), vcl::PixelFormat::N24_BPP);

Reply via email to