diff options
author | 2016-11-23 08:55:18 -0700 | |
---|---|---|
committer | 2016-11-23 16:40:32 +0000 | |
commit | db6830162eca5b94e61d9825ec93306fc615d204 (patch) | |
tree | 02be1aa930879c2b389e80beb4910c8d27027257 /src/image | |
parent | 45580d3e3024c1536e8e1b2017b704805442b634 (diff) |
SkImageEncoder: simplify API
(re-land 248ff02 & 2cb6cb7, with changes)
- Hide SkImageEncoder class in private header.
- SkImageEncoder::Type becomes SkEncodedImageFormat
- SkEncodedFormat becomes SkEncodedImageFormat
- SkImageEncoder static functions replaced with
single function EncodeImage()
- utility wrappers for EncodeImage() are in
sk_tool_utils.h
TODO: remove link-time registration mechanism.
TODO: clean up clients use of API and flip the flag.
TODO: implement EncodeImage() in chromeium/skia/ext
Change-Id: I47d451e50be4d5c6c130869c7fa7c2857243d9f0
Reviewed-on: https://skia-review.googlesource.com/4909
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Reviewed-on: https://skia-review.googlesource.com/5186
Commit-Queue: Hal Canary <halcanary@google.com>
Reviewed-by: Hal Canary <halcanary@google.com>
Diffstat (limited to 'src/image')
-rw-r--r-- | src/image/SkImage.cpp | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp index 3487b7d927..e0436815a7 100644 --- a/src/image/SkImage.cpp +++ b/src/image/SkImage.cpp @@ -103,27 +103,22 @@ sk_sp<SkShader> SkImage::makeShader(SkShader::TileMode tileX, SkShader::TileMode return SkImageShader::Make(sk_ref_sp(const_cast<SkImage*>(this)), tileX, tileY, localMatrix); } -SkData* SkImage::encode(SkImageEncoder::Type type, int quality) const { +SkData* SkImage::encode(SkEncodedImageFormat type, int quality) const { SkBitmap bm; // TODO: Right now, the encoders don't handle F16 or linearly premultiplied data. Once they do, // we should decode in "color space aware" mode, then re-encode that. For now, work around this // by asking for a legacy decode (which gives us the raw data in N32). if (as_IB(this)->getROPixels(&bm, SkDestinationSurfaceColorMode::kLegacy)) { - return SkImageEncoder::EncodeData(bm, type, quality); + SkDynamicMemoryWStream buf; + return SkEncodeImage(&buf, bm, type, quality) ? buf.detachAsData().release() : nullptr; } return nullptr; } SkData* SkImage::encode(SkPixelSerializer* serializer) const { - sk_sp<SkPixelSerializer> defaultSerializer; - SkPixelSerializer* effectiveSerializer = serializer; - if (!effectiveSerializer) { - defaultSerializer.reset(SkImageEncoder::CreatePixelSerializer()); - SkASSERT(defaultSerializer.get()); - effectiveSerializer = defaultSerializer.get(); - } sk_sp<SkData> encoded(this->refEncoded()); - if (encoded && effectiveSerializer->useEncodedData(encoded->data(), encoded->size())) { + if (encoded && + (!serializer || serializer->useEncodedData(encoded->data(), encoded->size()))) { return encoded.release(); } @@ -134,7 +129,13 @@ SkData* SkImage::encode(SkPixelSerializer* serializer) const { // by asking for a legacy decode (which gives us the raw data in N32). if (as_IB(this)->getROPixels(&bm, SkDestinationSurfaceColorMode::kLegacy) && bm.requestLock(&apu)) { - return effectiveSerializer->encode(apu.pixmap()); + if (serializer) { + return serializer->encode(apu.pixmap()); + } else { + SkDynamicMemoryWStream buf; + return SkEncodeImage(&buf, apu.pixmap(), SkEncodedImageFormat::kPNG, 100) + ? buf.detachAsData().release() : nullptr; + } } return nullptr; @@ -188,7 +189,7 @@ GrBackendObject SkImage::getTextureHandle(bool flushPendingGrContextIO) const { GrTexture* texture = as_IB(this)->peekTexture(); if (texture) { GrContext* context = texture->getContext(); - if (context) { + if (context) { if (flushPendingGrContextIO) { context->prepareSurfaceForExternalIO(texture); } |