diff options
author | 2017-12-04 14:27:01 -0500 | |
---|---|---|
committer | 2017-12-04 20:01:09 +0000 | |
commit | f7ee95c3d0b317e527314329437dea0b3ab9b422 (patch) | |
tree | 5de261a21c46f163e4de2c127ab3a343dae5a243 /src | |
parent | 1ef80942b3b2414c862eb1e9ae301442b447c089 (diff) |
helper api to force a raster image
Bug: skia:
Change-Id: I53f3d426e97f446b17dc965fa8dd6d6aae441ac9
Reviewed-on: https://skia-review.googlesource.com/79901
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Reed <reed@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/image/SkImage.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/image/SkImage.cpp b/src/image/SkImage.cpp index b60224038e..c157e48640 100644 --- a/src/image/SkImage.cpp +++ b/src/image/SkImage.cpp @@ -325,6 +325,28 @@ sk_sp<SkImage> SkImage::makeColorSpace(sk_sp<SkColorSpace> target, return as_IB(this)->onMakeColorSpace(std::move(target), targetColorType, premulBehavior); } +sk_sp<SkImage> SkImage::makeRasterImage() const { + SkPixmap pm; + if (this->peekPixels(&pm)) { + return sk_ref_sp(const_cast<SkImage*>(this)); + } + + const SkImageInfo info = as_IB(this)->onImageInfo(); + const size_t rowBytes = info.minRowBytes(); + size_t size = info.computeByteSize(rowBytes); + if (SkImageInfo::ByteSizeOverflowed(size)) { + return nullptr; + } + + sk_sp<SkData> data = SkData::MakeUninitialized(size); + pm = { info, data->writable_data(), info.minRowBytes() }; + if (!this->readPixels(pm, 0, 0)) { + return nullptr; + } + + return SkImage::MakeRasterData(info, std::move(data), rowBytes); +} + ////////////////////////////////////////////////////////////////////////////////////// #if !SK_SUPPORT_GPU |