SkBitmap NativeImageSkia::resizedBitmap(const SkISize& scaledImageSize, const SkIRect& scaledImageSubset) const { #if PLATFORM(CHROMIUM) if (DeferredImageDecoder::isLazyDecoded(m_image)) return DeferredImageDecoder::createResizedLazyDecodingBitmap(m_image, scaledImageSize, scaledImageSubset); #endif if (!hasResizedBitmap(scaledImageSize, scaledImageSubset)) { bool shouldCache = isDataComplete() && shouldCacheResampling(scaledImageSize, scaledImageSubset); PlatformInstrumentation::willResizeImage(shouldCache); SkBitmap resizedImage = skia::ImageOperations::Resize(m_image, skia::ImageOperations::RESIZE_LANCZOS3, scaledImageSize.width(), scaledImageSize.height(), scaledImageSubset); resizedImage.setImmutable(); PlatformInstrumentation::didResizeImage(); if (!shouldCache) return resizedImage; m_resizedImage = resizedImage; } SkBitmap resizedSubset; SkIRect resizedSubsetRect = m_cachedImageInfo.rectInSubset(scaledImageSubset); m_resizedImage.extractSubset(&resizedSubset, resizedSubsetRect); return resizedSubset; }
SkBitmap NativeImageSkia::resizedBitmap(const SkISize& scaledImageSize, const SkIRect& scaledImageSubset) const { ASSERT(!DeferredImageDecoder::isLazyDecoded(bitmap())); if (!hasResizedBitmap(scaledImageSize, scaledImageSubset)) { bool shouldCache = isDataComplete() && shouldCacheResampling(scaledImageSize, scaledImageSubset); SkBitmap resizedImage = skia::ImageOperations::Resize(bitmap(), skia::ImageOperations::RESIZE_LANCZOS3, scaledImageSize.width(), scaledImageSize.height(), scaledImageSubset); resizedImage.setImmutable(); if (!shouldCache) return resizedImage; m_resizedImage = resizedImage; } SkBitmap resizedSubset; SkIRect resizedSubsetRect = m_cachedImageInfo.rectInSubset(scaledImageSubset); m_resizedImage.extractSubset(&resizedSubset, resizedSubsetRect); return resizedSubset; }
SkBitmap NativeImageSkia::resizedBitmap(const SkIRect& srcSubset, int destWidth, int destHeight, const SkIRect& destVisibleSubset) const { if (!hasResizedBitmap(srcSubset, destWidth, destHeight)) { bool shouldCache = m_isDataComplete && shouldCacheResampling(srcSubset, destWidth, destHeight, destVisibleSubset); SkBitmap subset; m_image.extractSubset(&subset, srcSubset); if (!shouldCache) { // Just resize the visible subset and return it. SkBitmap resizedImage = skia::ImageOperations::Resize(subset, skia::ImageOperations::RESIZE_LANCZOS3, destWidth, destHeight, destVisibleSubset); return resizedImage; } m_resizedImage = skia::ImageOperations::Resize(subset, skia::ImageOperations::RESIZE_LANCZOS3, destWidth, destHeight); } SkBitmap visibleBitmap; m_resizedImage.extractSubset(&visibleBitmap, destVisibleSubset); return visibleBitmap; }