summaryrefslogtreecommitdiff
path: root/vcl/qa/cppunit/skia
diff options
context:
space:
mode:
authorLuboš Luňák <l.lunak@collabora.com>2020-10-02 15:29:34 +0200
committerLuboš Luňák <l.lunak@collabora.com>2020-10-04 11:10:51 +0200
commitc57010def9e2e62b1d3d60f13ec58967c09fbf91 (patch)
treeaff6cdfa57de5c86318d27c7c03a8dee4f949b71 /vcl/qa/cppunit/skia
parent138cd28e2605740bbcacd22bac14aeb6bc5763cd (diff)
optimize and unittest SkiaSalBitmap::InterpretAs8Bit()
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 <l.lunak@collabora.com>
Diffstat (limited to 'vcl/qa/cppunit/skia')
-rw-r--r--vcl/qa/cppunit/skia/skia.cxx40
1 files changed, 35 insertions, 5 deletions
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<SkiaSalBitmap*>(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<SkiaSalBitmap*>(bitmap.ImplGetSalBitmap().get());
- CPPUNIT_ASSERT(skiaBitmap);
CPPUNIT_ASSERT(skiaBitmap->PreferSkShader());
AlphaMask alpha(Size(10, 10));
alpha.Erase(64);
SkiaSalBitmap* skiaAlpha = dynamic_cast<SkiaSalBitmap*>(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<SkiaSalBitmap*>(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<SkiaSalBitmap*>(bitmap.ImplGetSalBitmap().get());
+ CPPUNIT_ASSERT(skiaBitmap->unittestHasEraseColor());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(24), bitmap.GetBitCount());
+ bitmap.Convert(BmpConversion::N8BitNoConversion);
+ skiaBitmap = dynamic_cast<SkiaSalBitmap*>(bitmap.ImplGetSalBitmap().get());
+ CPPUNIT_ASSERT(skiaBitmap->unittestHasEraseColor());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(8), bitmap.GetBitCount());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt8>(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<SkiaSalBitmap*>(bitmap.ImplGetSalBitmap().get());
+ skiaBitmap->GetSkImage();
+ CPPUNIT_ASSERT(!skiaBitmap->unittestHasEraseColor());
+ CPPUNIT_ASSERT(skiaBitmap->unittestHasImage());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(24), bitmap.GetBitCount());
+ bitmap.Convert(BmpConversion::N8BitNoConversion);
+ skiaBitmap = dynamic_cast<SkiaSalBitmap*>(bitmap.ImplGetSalBitmap().get());
+ CPPUNIT_ASSERT(skiaBitmap->unittestHasImage());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt16>(8), bitmap.GetBitCount());
+ CPPUNIT_ASSERT_EQUAL(static_cast<sal_uInt8>(34), BitmapReadAccess(bitmap).GetPixelIndex(0, 0));
+}
+
} // namespace
CPPUNIT_TEST_SUITE_REGISTRATION(SkiaTest);