Index: src/image/SkImage.cpp |
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp |
index 1169459df638d79d9a4262216f531274b139f402..7a5ea72c23862294d7622c5774da88483992a1d4 100644 |
--- a/src/image/SkImage.cpp |
+++ b/src/image/SkImage.cpp |
@@ -5,10 +5,11 @@ |
* found in the LICENSE file. |
*/ |
-#include "SkImage_Base.h" |
-#include "SkImagePriv.h" |
#include "SkBitmap.h" |
#include "SkCanvas.h" |
+#include "SkImageEncoder.h" |
+#include "SkImagePriv.h" |
+#include "SkImage_Base.h" |
SK_DEFINE_INST_COUNT(SkImage) |
@@ -16,6 +17,10 @@ static SkImage_Base* asIB(SkImage* image) { |
return static_cast<SkImage_Base*>(image); |
} |
robertphillips
2013/05/28 23:22:56
shouldn't this be as_IB and be in an anonymous nam
scroggo
2013/05/29 17:34:20
I've changed asIB to as_IB. I don't see anything i
|
+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,29 @@ void SkImage::draw(SkCanvas* canvas, SkScalar x, SkScalar y, |
GrTexture* SkImage::getTexture() { |
return asIB(this)->onGetTexture(); |
} |
+ |
+static const struct { |
+ SkImageEncoder::Type fIE; |
+ SkImage::EncodeType fET; |
+} gTable[] = { |
+ { SkImageEncoder::kBMP_Type, SkImage::kBMP_EncodeType }, |
+ { SkImageEncoder::kGIF_Type, SkImage::kGIF_EncodeType }, |
+ { SkImageEncoder::kICO_Type, SkImage::kICO_EncodeType }, |
+ { SkImageEncoder::kJPEG_Type, SkImage::kJPEG_EncodeType }, |
+ { SkImageEncoder::kPNG_Type, SkImage::kPNG_EncodeType }, |
+ { SkImageEncoder::kWBMP_Type, SkImage::kWBMP_EncodeType }, |
+ { SkImageEncoder::kWEBP_Type, SkImage::kWEBP_EncodeType }, |
+}; |
+ |
robertphillips
2013/05/28 23:22:56
Since SkImageEncoder::Type is an enum couldn't we
scroggo
2013/05/29 17:34:20
After looking at this some more, I don't think it
|
+SkData* SkImage::encode(EncodeType et, int quality) const { |
+ for (size_t i = 0; i < SK_ARRAY_COUNT(gTable); ++i) { |
+ if (gTable[i].fET == et) { |
+ SkBitmap bm; |
+ if (asIB(this)->getROPixels(&bm)) { |
+ return SkImageEncoder::EncodeData(bm, gTable[i].fIE, quality); |
+ } |
+ break; |
+ } |
+ } |
+ return NULL; |
+} |