Chromium Code Reviews| Index: src/images/SkImageEncoder.cpp |
| diff --git a/src/images/SkImageEncoder.cpp b/src/images/SkImageEncoder.cpp |
| index cc1b73baa52150de72f20c1543634503d83770f9..7f59a2746e0233a795dd2c7313ac029bdb85cbb5 100644 |
| --- a/src/images/SkImageEncoder.cpp |
| +++ b/src/images/SkImageEncoder.cpp |
| @@ -7,6 +7,8 @@ |
| #include "SkImageEncoder.h" |
| #include "SkBitmap.h" |
| +#include "SkPixelSerializer.h" |
| +#include "SkPixmap.h" |
| #include "SkStream.h" |
| #include "SkTemplates.h" |
| @@ -57,6 +59,39 @@ SkData* SkImageEncoder::EncodeData(const SkImageInfo& info, const void* pixels, |
| if (!bm.installPixels(info, const_cast<void*>(pixels), rowBytes)) { |
| return nullptr; |
| } |
| - SkAutoTDelete<SkImageEncoder> enc(SkImageEncoder::Create(t)); |
| - return enc.get() ? enc.get()->encodeData(bm, quality) : nullptr; |
| + bm.setImmutable(); |
|
reed1
2015/12/07 15:01:28
why is this needed?
hal.canary
2015/12/07 15:15:36
I think it's a good idea to call setImmutable() to
reed1
2015/12/07 15:28:29
I don't disagree, but I think its extraneous, sinc
|
| + return SkImageEncoder::EncodeData(bm, t, quality); |
| +} |
| + |
| +SkData* SkImageEncoder::EncodeData(const SkPixmap& pixmap, |
| + Type t, int quality) { |
| + SkBitmap bm; |
| + if (!bm.installPixels(pixmap.info(), |
| + const_cast<void*>(pixmap.addr()), |
| + pixmap.rowBytes(), |
| + pixmap.ctable(), nullptr, nullptr)) { |
| + return nullptr; |
| + } |
| + bm.setImmutable(); |
| + return SkImageEncoder::EncodeData(bm, t, quality); |
| +} |
| + |
| +namespace { |
| +class ImageEncoderPixelSerializer final : public SkPixelSerializer { |
| +protected: |
| + bool onUseEncodedData(const void*, size_t) override { return true; } |
| + SkData* onEncode(const SkPixmap& pixmap) override { |
| + return SkImageEncoder::EncodeData(pixmap, SkImageEncoder::kPNG_Type, 100); |
| + } |
| + SkData* onEncodePixels(const SkImageInfo& info, |
| + const void* pixels, |
| + size_t rowBytes) override { |
| + return SkImageEncoder::EncodeData(info, pixels, rowBytes, |
| + SkImageEncoder::kPNG_Type, 100); |
| + } |
| +}; |
| +} // namespace |
| + |
| +SkPixelSerializer* SkImageEncoder::CreatePixelSerializer() { |
| + return new ImageEncoderPixelSerializer; |
| } |