aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/image/SkImage.cpp
diff options
context:
space:
mode:
authorGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-05-20 16:33:41 +0000
committerGravatar reed@google.com <reed@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2013-05-20 16:33:41 +0000
commit4b0757b7489ee5d6bd7149bbcdb0b2af6b7a21cb (patch)
treed408b82779c2362f9888888456e0441995648fce /src/image/SkImage.cpp
parent845220b8179a73c8ec3e53b6dcc11ee3d30ad6a4 (diff)
add encodeData() to SkImageEncoder, and add encoding to SkImage
BUG= R=scroggo@google.com Review URL: https://codereview.chromium.org/15002004 git-svn-id: http://skia.googlecode.com/svn/trunk@9193 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/image/SkImage.cpp')
-rw-r--r--src/image/SkImage.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index 1169459df6..13af631b2a 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,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 },
+};
+
+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;
+}