diff options
author | Hal Canary <halcanary@google.com> | 2016-11-22 14:21:38 -0700 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2016-11-22 21:23:51 +0000 |
commit | a2b4bdce8cfd1a91407595a25683ecff982af22e (patch) | |
tree | 2e8fad7d92be4e8a024db784747944d110a80123 /src/images/SkImageEncoder.cpp | |
parent | 6b77f1cf09f6a3c47a42e29dc28087ac9f9cdb25 (diff) |
Revert 248ff023 & 2cb6cb72
Revert "SkImageEncoder: simplify API"
This reverts commit 248ff02331d7f73ee4b6c5a7eabeae1080c16cd4.
Revert "Fix bug: can't convert nullptr -> bool"
This reverts commit 2cb6cb7218171b357bb5c934f032ba69c7b78401.
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5151
NOTRY=true
Change-Id: I5f6414392d6545f74db0b5bb50608d04f053a8ec
Reviewed-on: https://skia-review.googlesource.com/5151
Commit-Queue: Hal Canary <halcanary@google.com>
Reviewed-by: Hal Canary <halcanary@google.com>
Diffstat (limited to 'src/images/SkImageEncoder.cpp')
-rw-r--r-- | src/images/SkImageEncoder.cpp | 83 |
1 files changed, 76 insertions, 7 deletions
diff --git a/src/images/SkImageEncoder.cpp b/src/images/SkImageEncoder.cpp index c137bc5e0a..787ff8ef62 100644 --- a/src/images/SkImageEncoder.cpp +++ b/src/images/SkImageEncoder.cpp @@ -5,15 +5,84 @@ * found in the LICENSE file. */ -#include "SkImageEncoderPriv.h" +#include "SkImageEncoder.h" +#include "SkBitmap.h" +#include "SkPixelSerializer.h" +#include "SkPixmap.h" +#include "SkStream.h" +#include "SkTemplates.h" -bool SkEncodeImage(SkWStream* dst, const SkPixmap& src, - SkEncodedImageFormat format, int quality) { +SkImageEncoder::~SkImageEncoder() {} + +bool SkImageEncoder::encodeStream(SkWStream* stream, const SkBitmap& bm, + int quality) { + quality = SkMin32(100, SkMax32(0, quality)); + return this->onEncode(stream, bm, quality); +} + +bool SkImageEncoder::encodeFile(const char file[], const SkBitmap& bm, + int quality) { + quality = SkMin32(100, SkMax32(0, quality)); + SkFILEWStream stream(file); + return this->onEncode(&stream, bm, quality); +} + +SkData* SkImageEncoder::encodeData(const SkBitmap& bm, int quality) { + SkDynamicMemoryWStream stream; + quality = SkMin32(100, SkMax32(0, quality)); + if (this->onEncode(&stream, bm, quality)) { + return stream.detachAsData().release(); + } + return nullptr; +} + +bool SkImageEncoder::EncodeFile(const char file[], const SkBitmap& bm, Type t, + int quality) { + std::unique_ptr<SkImageEncoder> enc(SkImageEncoder::Create(t)); + return enc.get() && enc.get()->encodeFile(file, bm, quality); +} + +bool SkImageEncoder::EncodeStream(SkWStream* stream, const SkBitmap& bm, Type t, + int quality) { + std::unique_ptr<SkImageEncoder> enc(SkImageEncoder::Create(t)); + return enc.get() && enc.get()->encodeStream(stream, bm, quality); +} + +SkData* SkImageEncoder::EncodeData(const SkBitmap& bm, Type t, int quality) { + std::unique_ptr<SkImageEncoder> enc(SkImageEncoder::Create(t)); + return enc.get() ? enc.get()->encodeData(bm, quality) : nullptr; +} + +SkData* SkImageEncoder::EncodeData(const SkImageInfo& info, const void* pixels, size_t rowBytes, + Type t, int quality) { SkBitmap bm; - if (!bm.installPixels(src)) { - return false; + if (!bm.installPixels(info, const_cast<void*>(pixels), rowBytes)) { + return nullptr; } bm.setImmutable(); - std::unique_ptr<SkImageEncoder> enc(SkImageEncoder::Create((SkImageEncoder::Type)format)); - return enc && enc->encodeStream(dst, bm, quality); + return SkImageEncoder::EncodeData(bm, t, quality); +} + +SkData* SkImageEncoder::EncodeData(const SkPixmap& pixmap, + Type t, int quality) { + SkBitmap bm; + if (!bm.installPixels(pixmap)) { + 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& pmap) override { + return SkImageEncoder::EncodeData(pmap, SkImageEncoder::kPNG_Type, 100); + } +}; +} // namespace + +SkPixelSerializer* SkImageEncoder::CreatePixelSerializer() { + return new ImageEncoderPixelSerializer; } |