Add SkColorType getter on SkImage.

Bug: skia:
Change-Id: I131fb5f7faf3f54e0eb6d31b800d224e6d4963ce
Reviewed-on: https://skia-review.googlesource.com/114464
Reviewed-by: Cary Clark <caryclark@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
diff --git a/docs/SkImage_Reference.bmh b/docs/SkImage_Reference.bmh
index d11fa1c..f45862a 100644
--- a/docs/SkImage_Reference.bmh
+++ b/docs/SkImage_Reference.bmh
@@ -1070,6 +1070,24 @@
 
 # ------------------------------------------------------------------------------
 
+#Method SkColorType colorType() const
+#In Property
+#Line # returns Color_Type ##
+
+Returns Color_Type if known; otherwise, returns kUnknown_SkColorType.
+
+#Return Color_Type of Image ##
+
+#Example
+// incomplete
+##
+
+#SeeAlso SkImageInfo::colorType
+
+#Method ##
+
+# ------------------------------------------------------------------------------
+
 #Method SkColorSpace* colorSpace() const
 #In Property
 #Line # returns Color_Space ##
diff --git a/include/core/SkImage.h b/include/core/SkImage.h
index 30637a6..d8612f0 100644
--- a/include/core/SkImage.h
+++ b/include/core/SkImage.h
@@ -500,6 +500,12 @@
     */
     SkAlphaType alphaType() const;
 
+    /** Returns SkColorType if known; otherwise, returns kUnknown_SkColorType.
+
+        @return SkColorType of SkImage
+    */
+    SkColorType colorType() const;
+
     /** Returns SkColorSpace, the range of colors, associated with SkImage.  The
         reference count of SkColorSpace is unchanged. The returned SkColorSpace is
         immutable.
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 7b90d6e..4eebef7 100644
--- a/src/image/SkImage.cpp
+++ b/src/image/SkImage.cpp
@@ -74,6 +74,10 @@
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
+SkColorType SkImage::colorType() const {
+    return as_IB(this)->onColorType();
+}
+
 SkAlphaType SkImage::alphaType() const {
     return as_IB(this)->onAlphaType();
 }
diff --git a/src/image/SkImage_Base.h b/src/image/SkImage_Base.h
index 903cd82..b3bbbc4 100644
--- a/src/image/SkImage_Base.h
+++ b/src/image/SkImage_Base.h
@@ -35,6 +35,7 @@
     // Implementors: if you can not return the value, return an invalid ImageInfo with w=0 & h=0
     // & unknown color space.
     virtual SkImageInfo onImageInfo() const = 0;
+    virtual SkColorType onColorType() const = 0;
     virtual SkAlphaType onAlphaType() const = 0;
 
     virtual bool onPeekPixels(SkPixmap*) const { return false; }
diff --git a/src/image/SkImage_Gpu.cpp b/src/image/SkImage_Gpu.cpp
index 7c842f6..38f38c9 100644
--- a/src/image/SkImage_Gpu.cpp
+++ b/src/image/SkImage_Gpu.cpp
@@ -60,11 +60,16 @@
 }
 
 SkImageInfo SkImage_Gpu::onImageInfo() const {
+    return SkImageInfo::Make(fProxy->width(), fProxy->height(), this->onColorType(), fAlphaType,
+                             fColorSpace);
+}
+
+SkColorType SkImage_Gpu::onColorType() const {
     SkColorType ct;
     if (!GrPixelConfigToColorType(fProxy->config(), &ct)) {
         ct = kUnknown_SkColorType;
     }
-    return SkImageInfo::Make(fProxy->width(), fProxy->height(), ct, fAlphaType, fColorSpace);
+    return ct;
 }
 
 bool SkImage_Gpu::getROPixels(SkBitmap* dst, SkColorSpace*, CachingHint chint) const {
diff --git a/src/image/SkImage_Gpu.h b/src/image/SkImage_Gpu.h
index 24a8c78..3c536a4 100644
--- a/src/image/SkImage_Gpu.h
+++ b/src/image/SkImage_Gpu.h
@@ -28,6 +28,7 @@
     ~SkImage_Gpu() override;
 
     SkImageInfo onImageInfo() const override;
+    SkColorType onColorType() const override;
     SkAlphaType onAlphaType() const override { return fAlphaType; }
 
     bool getROPixels(SkBitmap*, SkColorSpace* dstColorSpace, CachingHint) const override;
diff --git a/src/image/SkImage_Lazy.cpp b/src/image/SkImage_Lazy.cpp
index 4adf4e8..4c12b81 100644
--- a/src/image/SkImage_Lazy.cpp
+++ b/src/image/SkImage_Lazy.cpp
@@ -70,6 +70,9 @@
     SkImageInfo onImageInfo() const override {
         return fInfo;
     }
+    SkColorType onColorType() const override {
+        return kUnknown_SkColorType;
+    }
     SkAlphaType onAlphaType() const override {
         return fInfo.alphaType();
     }
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
index 3ed3a8a..688f71c 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -77,6 +77,9 @@
     SkImageInfo onImageInfo() const override {
         return fBitmap.info();
     }
+    SkColorType onColorType() const override {
+        return fBitmap.colorType();
+    }
     SkAlphaType onAlphaType() const override {
         return fBitmap.alphaType();
     }