Index: src/image/SkImage_Raster.cpp |
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp |
index 2b64839bc51f543e538062f0fe4063346fcb31fc..3229e95ff2966cbcde0395df18d9e5fc0f9fb319 100644 |
--- a/src/image/SkImage_Raster.cpp |
+++ b/src/image/SkImage_Raster.cpp |
@@ -9,7 +9,7 @@ |
#include "SkBitmap.h" |
#include "SkCanvas.h" |
#include "SkData.h" |
-#include "SkImageGenerator.h" |
+#include "SkImageGeneratorPriv.h" |
#include "SkImagePriv.h" |
#include "SkPixelRef.h" |
#include "SkSurface.h" |
@@ -59,6 +59,7 @@ public: |
SkSurface* onNewSurface(const SkImageInfo&, const SkSurfaceProps&) const override; |
bool onReadPixels(const SkImageInfo&, void*, size_t, int srcX, int srcY) const override; |
const void* onPeekPixels(SkImageInfo*, size_t* /*rowBytes*/) const override; |
+ SkData* onRefEncodedData(SkIPoint* origin) const override; |
bool getROPixels(SkBitmap*) const override; |
// exposed for SkSurface_Raster via SkNewImageFromPixelRef |
@@ -141,6 +142,15 @@ const void* SkImage_Raster::onPeekPixels(SkImageInfo* infoPtr, size_t* rowBytesP |
return fBitmap.getPixels(); |
} |
+SkData* SkImage_Raster::onRefEncodedData(SkIPoint* origin) const { |
+ SkData* data = fBitmap.pixelRef()->refEncodedData(); |
+ if (data) { |
+ *origin = fBitmap.pixelRefOrigin(); |
+ return data; |
+ } |
+ return NULL; |
+} |
+ |
bool SkImage_Raster::getROPixels(SkBitmap* dst) const { |
*dst = fBitmap; |
return true; |
@@ -185,9 +195,9 @@ SkImage* SkImage::NewFromRaster(const SkImageInfo& info, const void* pixels, siz |
return SkNEW_ARGS(SkImage_Raster, (info, data, rowBytes, NULL)); |
} |
-SkImage* SkImage::NewFromGenerator(SkImageGenerator* generator) { |
+SkImage* SkImage::NewFromGenerator(SkImageGenerator* generator, const SkIRect* subset) { |
SkBitmap bitmap; |
- if (!SkInstallDiscardablePixelRef(generator, &bitmap)) { |
+ if (!SkInstallDiscardablePixelRef(generator, subset, &bitmap, NULL)) { |
return NULL; |
} |
if (0 == bitmap.width() || 0 == bitmap.height()) { |