aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/image/SkImage.cpp
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2016-11-22 09:03:03 -0700
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2016-11-22 18:25:55 +0000
commit248ff02331d7f73ee4b6c5a7eabeae1080c16cd4 (patch)
treea55e2402ef1494e2fb719bc046f1f97c8e75da53 /src/image/SkImage.cpp
parent46e66a2bf51546a7c3b08625769899b9ead56ec6 (diff)
SkImageEncoder: simplify API
- 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 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=4909 Change-Id: Ib48b31fdc05cf23cda7f56ebfd67c841c149ce70 Reviewed-on: https://skia-review.googlesource.com/4909 Reviewed-by: Mike Reed <reed@google.com> Reviewed-by: Leon Scroggins <scroggo@google.com> Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'src/image/SkImage.cpp')
-rw-r--r--src/image/SkImage.cpp25
1 files changed, 13 insertions, 12 deletions
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp
index f976242eca..485bd24632 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);
}