diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2020-05-06 11:08:22 +0300 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2020-05-07 21:56:23 +0200 |
commit | 84808eed2405ed6ee586e87bb664a816f7b91b70 (patch) | |
tree | 38bfad43c2fff3e4185f7e9720f88e84090e1dfe /vcl/qa | |
parent | 547b2891d9fe97dee9df14106e91dc4df659d4d5 (diff) |
Add basic morphology (erode/dilate) bitmap filter
Needed for glow effect (tdf#101181)
Change-Id: Id41daa1dc17e3749a30ce75fa3127878b9e0cfd1
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93552
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'vcl/qa')
-rw-r--r-- | vcl/qa/cppunit/BitmapFilterTest.cxx | 78 | ||||
-rw-r--r-- | vcl/qa/cppunit/data/testBasicMorphology.png | bin | 0 -> 226 bytes | |||
-rw-r--r-- | vcl/qa/cppunit/data/testBasicMorphologyDilated1.png | bin | 0 -> 219 bytes | |||
-rw-r--r-- | vcl/qa/cppunit/data/testBasicMorphologyDilated1Eroded1.png | bin | 0 -> 224 bytes | |||
-rw-r--r-- | vcl/qa/cppunit/data/testBasicMorphologyDilated2.png | bin | 0 -> 174 bytes | |||
-rw-r--r-- | vcl/qa/cppunit/data/testBasicMorphologyDilated2Eroded1.png | bin | 0 -> 178 bytes |
6 files changed, 67 insertions, 11 deletions
diff --git a/vcl/qa/cppunit/BitmapFilterTest.cxx b/vcl/qa/cppunit/BitmapFilterTest.cxx index a28057a4bf57..fec21fa118f0 100644 --- a/vcl/qa/cppunit/BitmapFilterTest.cxx +++ b/vcl/qa/cppunit/BitmapFilterTest.cxx @@ -7,10 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include <cppunit/TestAssert.h> -#include <cppunit/TestFixture.h> -#include <cppunit/extensions/HelperMacros.h> -#include <cppunit/plugin/TestPlugIn.h> +#include <test/bootstrapfixture.hxx> #include <vcl/bitmap.hxx> #include <vcl/bitmapaccess.hxx> @@ -19,6 +16,7 @@ #include <tools/stream.hxx> #include <vcl/graphicfilter.hxx> +#include <vcl/BitmapBasicMorphologyFilter.hxx> #include <vcl/BitmapFilterStackBlur.hxx> #include <BitmapSymmetryCheck.hxx> @@ -29,15 +27,48 @@ namespace constexpr bool constWriteResultBitmap(false); constexpr bool constEnablePerformanceTest(false); -class BitmapFilterTest : public CppUnit::TestFixture +class BitmapFilterTest : public test::BootstrapFixture { +public: + BitmapFilterTest() + : test::BootstrapFixture(true, false) + { + } + void testBlurCorrectness(); + void testBasicMorphology(); void testPerformance(); CPPUNIT_TEST_SUITE(BitmapFilterTest); CPPUNIT_TEST(testBlurCorrectness); + CPPUNIT_TEST(testBasicMorphology); CPPUNIT_TEST(testPerformance); CPPUNIT_TEST_SUITE_END(); + +private: + OUString getFullUrl(const OUString& sFileName) + { + return m_directories.getURLFromSrc("vcl/qa/cppunit/data/") + sFileName; + } + + BitmapEx loadBitmap(const OUString& sFileName) + { + Graphic aGraphic; + const OUString aURL(getFullUrl(sFileName)); + SvFileStream aFileStream(aURL, StreamMode::READ); + GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter(); + ErrCode aResult = rFilter.ImportGraphic(aGraphic, aURL, aFileStream); + CPPUNIT_ASSERT_EQUAL(ERRCODE_NONE, aResult); + return aGraphic.GetBitmapEx(); + } + + template <class BitmapT> // handle both Bitmap and BitmapEx + void savePNG(const OUString& sWhere, const BitmapT& rBmp) + { + SvFileStream aStream(sWhere, StreamMode::WRITE | StreamMode::TRUNC); + GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter(); + rFilter.compressAsPNG(rBmp, aStream); + } }; void BitmapFilterTest::testBlurCorrectness() @@ -73,9 +104,7 @@ void BitmapFilterTest::testBlurCorrectness() if (constWriteResultBitmap) { - SvFileStream aStream("~/blurBefore.png", StreamMode::WRITE | StreamMode::TRUNC); - GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter(); - rFilter.compressAsPNG(aBitmap24Bit, aStream); + savePNG("~/blurBefore.png", aBitmap24Bit); } // Perform blur @@ -86,9 +115,7 @@ void BitmapFilterTest::testBlurCorrectness() if (constWriteResultBitmap) { - SvFileStream aStream("~/blurAfter.png", StreamMode::WRITE | StreamMode::TRUNC); - GraphicFilter& rFilter = GraphicFilter::GetGraphicFilter(); - rFilter.compressAsPNG(aBitmap24Bit, aStream); + savePNG("~/blurAfter.png", aBitmap24Bit); } // Check blurred bitmap parameters @@ -106,6 +133,35 @@ void BitmapFilterTest::testBlurCorrectness() } } +void BitmapFilterTest::testBasicMorphology() +{ + const BitmapEx aOrigBitmap = loadBitmap("testBasicMorphology.png"); + const BitmapEx aRefBitmapDilated1 = loadBitmap("testBasicMorphologyDilated1.png"); + const BitmapEx aRefBitmapDilated1Eroded1 = loadBitmap("testBasicMorphologyDilated1Eroded1.png"); + const BitmapEx aRefBitmapDilated2 = loadBitmap("testBasicMorphologyDilated2.png"); + const BitmapEx aRefBitmapDilated2Eroded1 = loadBitmap("testBasicMorphologyDilated2Eroded1.png"); + + BitmapEx aTransformBitmap = aOrigBitmap; + BitmapFilter::Filter(aTransformBitmap, BitmapDilateFilter(1)); + if (constWriteResultBitmap) + savePNG("~/Dilated1.png", aTransformBitmap); + CPPUNIT_ASSERT_EQUAL(aRefBitmapDilated1.GetChecksum(), aTransformBitmap.GetChecksum()); + BitmapFilter::Filter(aTransformBitmap, BitmapErodeFilter(1)); + if (constWriteResultBitmap) + savePNG("~/Dilated1Eroded1.png", aTransformBitmap); + CPPUNIT_ASSERT_EQUAL(aRefBitmapDilated1Eroded1.GetChecksum(), aTransformBitmap.GetChecksum()); + + aTransformBitmap = aOrigBitmap; + BitmapFilter::Filter(aTransformBitmap, BitmapDilateFilter(2)); + if (constWriteResultBitmap) + savePNG("~/Dilated2.png", aTransformBitmap); + CPPUNIT_ASSERT_EQUAL(aRefBitmapDilated2.GetChecksum(), aTransformBitmap.GetChecksum()); + BitmapFilter::Filter(aTransformBitmap, BitmapErodeFilter(1)); + if (constWriteResultBitmap) + savePNG("~/Dilated2Eroded1.png", aTransformBitmap); + CPPUNIT_ASSERT_EQUAL(aRefBitmapDilated2Eroded1.GetChecksum(), aTransformBitmap.GetChecksum()); +} + void BitmapFilterTest::testPerformance() { if (!constEnablePerformanceTest) diff --git a/vcl/qa/cppunit/data/testBasicMorphology.png b/vcl/qa/cppunit/data/testBasicMorphology.png Binary files differnew file mode 100644 index 000000000000..5db565779f73 --- /dev/null +++ b/vcl/qa/cppunit/data/testBasicMorphology.png diff --git a/vcl/qa/cppunit/data/testBasicMorphologyDilated1.png b/vcl/qa/cppunit/data/testBasicMorphologyDilated1.png Binary files differnew file mode 100644 index 000000000000..ba335bab3cb5 --- /dev/null +++ b/vcl/qa/cppunit/data/testBasicMorphologyDilated1.png diff --git a/vcl/qa/cppunit/data/testBasicMorphologyDilated1Eroded1.png b/vcl/qa/cppunit/data/testBasicMorphologyDilated1Eroded1.png Binary files differnew file mode 100644 index 000000000000..3b10a949af67 --- /dev/null +++ b/vcl/qa/cppunit/data/testBasicMorphologyDilated1Eroded1.png diff --git a/vcl/qa/cppunit/data/testBasicMorphologyDilated2.png b/vcl/qa/cppunit/data/testBasicMorphologyDilated2.png Binary files differnew file mode 100644 index 000000000000..30d90757ea7e --- /dev/null +++ b/vcl/qa/cppunit/data/testBasicMorphologyDilated2.png diff --git a/vcl/qa/cppunit/data/testBasicMorphologyDilated2Eroded1.png b/vcl/qa/cppunit/data/testBasicMorphologyDilated2Eroded1.png Binary files differnew file mode 100644 index 000000000000..a506577da49e --- /dev/null +++ b/vcl/qa/cppunit/data/testBasicMorphologyDilated2Eroded1.png |