Chromium Code Reviews| Index: src/image/SkImage.cpp |
| diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp |
| index 1169459df638d79d9a4262216f531274b139f402..6c87e8fd778844e00b5938ad86a32445f0f22cf7 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,28 @@ 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); |
| + } |
|
scroggo
2013/05/16 17:58:26
Minor nit: if asIB fails, shouldn't we break from
scroggo
2013/05/16 17:58:54
s/asIB/getROPixels/g
reed1
2013/05/16 18:01:41
Not a nit, but a bug! We should only try one type.
|
| + } |
| + } |
| + return NULL; |
| +} |