Index: src/image/SkImage.cpp |
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp |
index 1169459df638d79d9a4262216f531274b139f402..3050e3b69d41d306326b2884e05d082e9e6d8882 100644 |
--- a/src/image/SkImage.cpp |
+++ b/src/image/SkImage.cpp |
@@ -9,6 +9,7 @@ |
#include "SkImagePriv.h" |
#include "SkBitmap.h" |
#include "SkCanvas.h" |
+#include "../images/SkImageEncoder.h" |
SK_DEFINE_INST_COUNT(SkImage) |
@@ -16,6 +17,10 @@ static SkImage_Base* asIB(SkImage* image) { |
return static_cast<SkImage_Base*>(image); |
} |
+static const SkImage_Base* asIB(const SkImage* image) { |
+ return static_cast<const SkImage_Base*>(image); |
+} |
+ |
uint32_t SkImage::NextUniqueID() { |
static int32_t gUniqueID; |
@@ -35,3 +40,17 @@ void SkImage::draw(SkCanvas* canvas, SkScalar x, SkScalar y, |
GrTexture* SkImage::getTexture() { |
return asIB(this)->onGetTexture(); |
} |
+ |
+SkData* SkImage::encode(EncodeType et, int quality) const { |
+ SkImageEncoder::Type iet = (et == kPNG_EncodeType) |
+ ? SkImageEncoder::kPNG_Type : SkImageEncoder::kJPEG_Type; |
+ SkBitmap rocopy; |
+ |
+ if (asIB(this)->getROPixels(&rocopy)) { |
+ SkAutoTDelete<SkImageEncoder> encoder(SkImageEncoder::Create(iet)); |
+ if (encoder.get()) { |
+ return encoder->encodeData(rocopy, quality); |
+ } |
+ } |
+ return NULL; |
+} |