From 58cda8fa495225bbcb3d93bdd7f81ec515402475 Mon Sep 17 00:00:00 2001 From: Florin Malita Date: Wed, 23 Nov 2016 10:49:20 -0500 Subject: External image generator API: return an SkPixmap instead of SkImage R=reed@google.com BUG=skia:5806 GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=5134 Change-Id: Ib0215f63b67f4d5b619ebe1f1b70c7d95e604871 Reviewed-on: https://skia-review.googlesource.com/5134 Reviewed-by: Mike Reed Commit-Queue: Florin Malita --- gm/imagegeneratorexternal.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'gm/imagegeneratorexternal.cpp') diff --git a/gm/imagegeneratorexternal.cpp b/gm/imagegeneratorexternal.cpp index 7427dd424e..b6e86c4126 100644 --- a/gm/imagegeneratorexternal.cpp +++ b/gm/imagegeneratorexternal.cpp @@ -14,6 +14,10 @@ namespace { +void release_proc(void*, void* releaseCtx) { + reinterpret_cast(releaseCtx)->unref(); +} + class ExternalGenerator : public SkImageGenerator { public: ExternalGenerator(const SkISize size) @@ -53,10 +57,11 @@ protected: const SkScalar scale = SkTMin(scaleSize.width(), scaleSize.height()); const int lvl = SkScalarFloorToInt(-SkScalarLog2(scale)); - rec->fImage = fMips[SkTPin(lvl, 0, fMips.count())]; + const sk_sp& img = fMips[SkTPin(lvl, 0, fMips.count())]; + SkAssertResult(img->peekPixels(&rec->fPixmap)); const SkRect origBounds = SkRect::Make(this->getInfo().bounds()); - const SkRect newBounds = SkRect::Make(rec->fImage->bounds()); + const SkRect newBounds = SkRect::Make(img->bounds()); SkMatrix srcMap = SkMatrix::MakeScale(newBounds.width() / origBounds.width(), newBounds.height() / origBounds.height()); @@ -65,6 +70,9 @@ protected: rec->fQuality = kLow_SkFilterQuality; + rec->fReleaseProc = release_proc; + rec->fReleaseCtx = SkRef(img.get()); + return true; } -- cgit v1.2.3