diff options
Diffstat (limited to 'src/core/SkSpecialImage.cpp')
| -rw-r--r-- | src/core/SkSpecialImage.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/core/SkSpecialImage.cpp b/src/core/SkSpecialImage.cpp index 61acd3fc69..679c09464f 100644 --- a/src/core/SkSpecialImage.cpp +++ b/src/core/SkSpecialImage.cpp @@ -337,6 +337,25 @@ sk_sp<SkSpecialImage> SkSpecialImage::MakeFromRaster(const SkIRect& subset, return sk_make_sp<SkSpecialImage_Raster>(subset, *srcBM, props); } +sk_sp<SkSpecialImage> SkSpecialImage::CopyFromRaster(const SkIRect& subset, + const SkBitmap& bm, + const SkSurfaceProps* props) { + SkASSERT(rect_fits(subset, bm.width(), bm.height())); + + if (!bm.pixelRef()) { + return nullptr; + } + + SkBitmap tmp; + if (!tmp.tryAllocPixels(bm.info().makeWH(subset.width(), subset.height()))) { + return nullptr; + } + if (!bm.readPixels(tmp.info(), tmp.getPixels(), tmp.rowBytes(), subset.x(), subset.y())) { + return nullptr; + } + return sk_make_sp<SkSpecialImage_Raster>(subset, tmp, props); +} + #if SK_SUPPORT_GPU /////////////////////////////////////////////////////////////////////////////// static sk_sp<SkImage> wrap_proxy_in_image(GrContext* context, sk_sp<GrTextureProxy> proxy, |
