SkImage::NewFromGenerator(SkImageGenerator*), and a unit test.

R=reed@google.com

Author: halcanary@google.com

Review URL: https://codereview.chromium.org/465823003
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp
index e4768af..a1cd602 100644
--- a/src/image/SkImage_Raster.cpp
+++ b/src/image/SkImage_Raster.cpp
@@ -10,6 +10,7 @@
 #include "SkBitmap.h"
 #include "SkCanvas.h"
 #include "SkData.h"
+#include "SkDecodingImageGenerator.h"
 #include "SkMallocPixelRef.h"
 
 class SkImage_Raster : public SkImage_Base {
@@ -69,6 +70,10 @@
                                   SkShader::TileMode,
                                   const SkMatrix* localMatrix) const SK_OVERRIDE;
 
+    SkImage_Raster(const SkBitmap& bm)
+        : INHERITED(bm.width(), bm.height())
+        , fBitmap(bm) {}
+
 private:
     SkImage_Raster() : INHERITED(0, 0) {}
 
@@ -198,6 +203,14 @@
     return SkNEW_ARGS(SkImage_Raster, (info, data, rowBytes));
 }
 
+SkImage* SkImage::NewFromGenerator(SkImageGenerator* generator) {
+    SkBitmap bitmap;
+    if (!SkInstallDiscardablePixelRef(generator, &bitmap)) {
+        return NULL;
+    }
+    return SkNEW_ARGS(SkImage_Raster, (bitmap));
+}
+
 SkImage* SkNewImageFromPixelRef(const SkImageInfo& info, SkPixelRef* pr,
                                 size_t rowBytes) {
     return SkNEW_ARGS(SkImage_Raster, (info, pr, rowBytes));