add isAlphaOnly() query
authorreed <reed@google.com>
Mon, 31 Oct 2016 12:27:28 +0000 (05:27 -0700)
committerCommit bot <commit-bot@chromium.org>
Mon, 31 Oct 2016 12:27:28 +0000 (05:27 -0700)
BUG=skia:5904
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2461773002

TBR=

Review-Url: https://codereview.chromium.org/2461773002

include/core/SkImage.h
src/image/SkImage.cpp
tests/ImageIsOpaqueTest.cpp

index b67f0a3..290996e 100644 (file)
@@ -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()); }
 
     /**
index 09f7ecc..986fdec 100644 (file)
@@ -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
index ab995c8..cc7255d 100644 (file)
@@ -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);
+}