sk_sp<SkSpecialImage> SkSpecialImage::MakeFromRaster(const SkIRect& subset, const SkBitmap& bm, const SkSurfaceProps* props) { SkASSERT(rect_fits(subset, bm.width(), bm.height())); if (!bm.pixelRef()) { return nullptr; } const SkBitmap* srcBM = &bm; SkBitmap tmpStorage; // ImageFilters only handle N32 at the moment, so force our src to be that if (!valid_for_imagefilters(bm.info())) { if (!bm.copyTo(&tmpStorage, kN32_SkColorType)) { return nullptr; } srcBM = &tmpStorage; } return sk_make_sp<SkSpecialImage_Raster>(subset, *srcBM, props); }
sk_sp<SkSpecialImage> SkSpecialImage::MakeFromRaster(const SkIRect& subset, const SkBitmap& bm, const SkSurfaceProps* props) { SkASSERT(rect_fits(subset, bm.width(), bm.height())); if (!bm.pixelRef()) { return nullptr; } const SkBitmap* srcBM = &bm; SkBitmap tmp; // ImageFilters only handle N32 at the moment, so force our src to be that if (!valid_for_imagefilters(bm.info())) { if (!tmp.tryAllocPixels(bm.info().makeColorType(kN32_SkColorType)) || !bm.readPixels(tmp.info(), tmp.getPixels(), tmp.rowBytes(), 0, 0)) { return nullptr; } srcBM = &tmp; } return sk_make_sp<SkSpecialImage_Raster>(subset, *srcBM, props); }