sk_sp<SkSpecialImage> SkSpecialImage::MakeFromImage(const SkIRect& subset, sk_sp<SkImage> image, const SkSurfaceProps* props) { SkASSERT(rect_fits(subset, image->width(), image->height())); #if SK_SUPPORT_GPU if (GrTexture* texture = as_IB(image)->peekTexture()) { return MakeFromGpu(subset, image->uniqueID(), sk_ref_sp(texture), sk_ref_sp(as_IB(image)->onImageInfo().colorSpace()), props); } else #endif { SkBitmap bm; if (as_IB(image)->getROPixels(&bm)) { return MakeFromRaster(subset, bm, props); } } return nullptr; }
sk_sp<SkSpecialImage> SkSpecialImage::MakeFromImage(const SkIRect& subset, sk_sp<SkImage> image, SkColorSpace* dstColorSpace, const SkSurfaceProps* props) { SkASSERT(rect_fits(subset, image->width(), image->height())); #if SK_SUPPORT_GPU if (sk_sp<GrTextureProxy> proxy = as_IB(image)->asTextureProxyRef()) { GrContext* context = ((SkImage_Gpu*) as_IB(image))->context(); return MakeDeferredFromGpu(context, subset, image->uniqueID(), std::move(proxy), as_IB(image)->onImageInfo().refColorSpace(), props); } else #endif { SkBitmap bm; if (as_IB(image)->getROPixels(&bm, dstColorSpace)) { return MakeFromRaster(subset, bm, props); } } return nullptr; }
SkImage* SkImage::NewFromRaster(const Info& info, const void* pixels, size_t rowBytes, RasterReleaseProc proc, ReleaseContext releasectx) { return MakeFromRaster(SkPixmap(info, pixels, rowBytes), proc, releasectx).release(); }