aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/core/SkImage.h5
-rw-r--r--src/image/SkImage.cpp4
-rw-r--r--tests/ImageIsOpaqueTest.cpp31
3 files changed, 40 insertions, 0 deletions
diff --git a/include/core/SkImage.h b/include/core/SkImage.h
index b67f0a3d09..290996e0a9 100644
--- a/include/core/SkImage.h
+++ b/include/core/SkImage.h
@@ -167,6 +167,11 @@ public:
SkIRect bounds() const { return SkIRect::MakeWH(fWidth, fHeight); }
uint32_t uniqueID() const { return fUniqueID; }
SkAlphaType alphaType() const;
+
+ /**
+ * Returns true fi the image will be drawn as a mask, with no intrinsic color of its own.
+ */
+ bool isAlphaOnly() const;
bool isOpaque() const { return SkAlphaTypeIsOpaque(this->alphaType()); }
/**
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 09f7ecc4cf..986fdec3a4 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -371,6 +371,10 @@ bool SkImage::isLazyGenerated() const {
return as_IB(this)->onIsLazyGenerated();
}
+bool SkImage::isAlphaOnly() const {
+ return as_IB(this)->onImageInfo().colorType() == kAlpha_8_SkColorType;
+}
+
//////////////////////////////////////////////////////////////////////////////////////
#if !SK_SUPPORT_GPU
diff --git a/tests/ImageIsOpaqueTest.cpp b/tests/ImageIsOpaqueTest.cpp
index ab995c8140..cc7255d37a 100644
--- a/tests/ImageIsOpaqueTest.cpp
+++ b/tests/ImageIsOpaqueTest.cpp
@@ -102,3 +102,34 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(ImageIsOpaqueTest_Gpu, reporter, ctxInfo) {
}
#endif
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+#include "SkPictureRecorder.h"
+
+static sk_sp<SkPicture> make_picture() {
+ SkPictureRecorder recorder;
+ SkCanvas* canvas = recorder.beginRecording({ 0, 0, 10, 10 });
+ canvas->drawColor(SK_ColorRED);
+ return recorder.finishRecordingAsPicture();
+}
+
+DEF_TEST(Image_isAlphaOnly, reporter) {
+ SkPMColor pmColors = 0;
+ SkPixmap pmap = {
+ SkImageInfo::MakeN32Premul(1, 1),
+ &pmColors,
+ sizeof(pmColors)
+ };
+ for (auto& image : {
+ SkImage::MakeRasterCopy(pmap),
+ GetResourceAsImage("mandrill_128.png"),
+ GetResourceAsImage("color_wheel.jpg"),
+ SkImage::MakeFromPicture(make_picture(), { 10, 10 }, nullptr, nullptr),
+ })
+ {
+ REPORTER_ASSERT(reporter, image->isAlphaOnly() == false);
+ }
+
+ REPORTER_ASSERT(reporter, SkImage::MakeRasterCopy({
+ SkImageInfo::MakeA8(1, 1), (uint8_t*)&pmColors, 1})->isAlphaOnly() == true);
+}