From c57010def9e2e62b1d3d60f13ec58967c09fbf91 Mon Sep 17 00:00:00 2001 From: Luboš Luňák Date: Fri, 2 Oct 2020 15:29:34 +0200 Subject: optimize and unittest SkiaSalBitmap::InterpretAs8Bit() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reinterpreting a color is even simpler, and do it ourselves even if there is pixel buffer, as the SkImage is preferred (it'll be more likely used afterwards). Change-Id: I3ea7ea0abb3133dce18ee51f1aae324e7bb51196 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/103886 Tested-by: Jenkins Reviewed-by: Luboš Luňák --- vcl/qa/cppunit/skia/skia.cxx | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) (limited to 'vcl/qa') diff --git a/vcl/qa/cppunit/skia/skia.cxx b/vcl/qa/cppunit/skia/skia.cxx index 439440962b44..7fa4a9e3f00e 100644 --- a/vcl/qa/cppunit/skia/skia.cxx +++ b/vcl/qa/cppunit/skia/skia.cxx @@ -32,10 +32,12 @@ public: void testBitmapErase(); void testDrawShaders(); + void testInterpretAs8Bit(); CPPUNIT_TEST_SUITE(SkiaTest); CPPUNIT_TEST(testBitmapErase); CPPUNIT_TEST(testDrawShaders); + CPPUNIT_TEST(testInterpretAs8Bit); CPPUNIT_TEST_SUITE_END(); private: @@ -76,8 +78,7 @@ void SkiaTest::testBitmapErase() CPPUNIT_ASSERT(!skiaBitmap->unittestHasAlphaImage()); CPPUNIT_ASSERT(skiaBitmap->unittestHasEraseColor()); // Reading a pixel will create pixel data. - BitmapReadAccess access(bitmap); - CPPUNIT_ASSERT_EQUAL(BitmapColor(COL_RED), access.GetColor(0, 0)); + CPPUNIT_ASSERT_EQUAL(BitmapColor(COL_RED), BitmapReadAccess(bitmap).GetColor(0, 0)); skiaBitmap = dynamic_cast(bitmap.ImplGetSalBitmap().get()); CPPUNIT_ASSERT(skiaBitmap->unittestHasBuffer()); CPPUNIT_ASSERT(!skiaBitmap->unittestHasImage()); @@ -97,12 +98,10 @@ void SkiaTest::testDrawShaders() Bitmap bitmap(Size(10, 10), 24); bitmap.Erase(COL_RED); SkiaSalBitmap* skiaBitmap = dynamic_cast(bitmap.ImplGetSalBitmap().get()); - CPPUNIT_ASSERT(skiaBitmap); CPPUNIT_ASSERT(skiaBitmap->PreferSkShader()); AlphaMask alpha(Size(10, 10)); alpha.Erase(64); SkiaSalBitmap* skiaAlpha = dynamic_cast(alpha.ImplGetSalBitmap().get()); - CPPUNIT_ASSERT(skiaAlpha); CPPUNIT_ASSERT(skiaAlpha->PreferSkShader()); device->DrawBitmap(Point(5, 5), bitmap); @@ -143,7 +142,6 @@ void SkiaTest::testDrawShaders() bitmapLarge.Erase(COL_RED); SkiaSalBitmap* skiaBitmapLarge = dynamic_cast(bitmapLarge.ImplGetSalBitmap().get()); - CPPUNIT_ASSERT(skiaBitmapLarge); CPPUNIT_ASSERT(skiaBitmapLarge->PreferSkShader()); AlphaMask alphaLarge(Size(100, 100)); alphaLarge.Erase(64); @@ -171,6 +169,38 @@ void SkiaTest::testDrawShaders() device->Erase(); } +void SkiaTest::testInterpretAs8Bit() +{ + if (!SkiaHelper::isVCLSkiaEnabled()) + return; + Bitmap bitmap(Size(10, 10), 24); + // Test with erase color. + bitmap.Erase(Color(33, 33, 33)); + SkiaSalBitmap* skiaBitmap = dynamic_cast(bitmap.ImplGetSalBitmap().get()); + CPPUNIT_ASSERT(skiaBitmap->unittestHasEraseColor()); + CPPUNIT_ASSERT_EQUAL(static_cast(24), bitmap.GetBitCount()); + bitmap.Convert(BmpConversion::N8BitNoConversion); + skiaBitmap = dynamic_cast(bitmap.ImplGetSalBitmap().get()); + CPPUNIT_ASSERT(skiaBitmap->unittestHasEraseColor()); + CPPUNIT_ASSERT_EQUAL(static_cast(8), bitmap.GetBitCount()); + CPPUNIT_ASSERT_EQUAL(static_cast(33), BitmapReadAccess(bitmap).GetPixelIndex(0, 0)); + + // Test with image. + bitmap = Bitmap(Size(10, 10), 24); + bitmap.Erase(Color(34, 34, 34)); + BitmapReadAccess(bitmap).GetColor(0, 0); // Create pixel data, reset erase color. + skiaBitmap = dynamic_cast(bitmap.ImplGetSalBitmap().get()); + skiaBitmap->GetSkImage(); + CPPUNIT_ASSERT(!skiaBitmap->unittestHasEraseColor()); + CPPUNIT_ASSERT(skiaBitmap->unittestHasImage()); + CPPUNIT_ASSERT_EQUAL(static_cast(24), bitmap.GetBitCount()); + bitmap.Convert(BmpConversion::N8BitNoConversion); + skiaBitmap = dynamic_cast(bitmap.ImplGetSalBitmap().get()); + CPPUNIT_ASSERT(skiaBitmap->unittestHasImage()); + CPPUNIT_ASSERT_EQUAL(static_cast(8), bitmap.GetBitCount()); + CPPUNIT_ASSERT_EQUAL(static_cast(34), BitmapReadAccess(bitmap).GetPixelIndex(0, 0)); +} + } // namespace CPPUNIT_TEST_SUITE_REGISTRATION(SkiaTest); -- cgit