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);
