Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(119)

Unified Diff: src/core/SkBitmapScaler.cpp

Issue 1320513005: simplify bitmap scaler and cache (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/SkBitmapScaler.h ('k') | tests/SkResourceCacheTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkBitmapScaler.cpp
diff --git a/src/core/SkBitmapScaler.cpp b/src/core/SkBitmapScaler.cpp
index ff053a9a41b2a71db1c4444feef9e748291db4dc..962fdce3758c126b2b81d1bf67588d45bcd392b0 100644
--- a/src/core/SkBitmapScaler.cpp
+++ b/src/core/SkBitmapScaler.cpp
@@ -62,10 +62,10 @@ SkResizeFilter::SkResizeFilter(SkBitmapScaler::ResizeMethod method,
const SkRect& destSubset,
const SkConvolutionProcs& convolveProcs) {
- // method will only ever refer to an "algorithm method".
- SkASSERT((SkBitmapScaler::RESIZE_FIRST_ALGORITHM_METHOD <= method) &&
- (method <= SkBitmapScaler::RESIZE_LAST_ALGORITHM_METHOD));
+ SkASSERT(method >= SkBitmapScaler::RESIZE_FirstMethod &&
+ method <= SkBitmapScaler::RESIZE_LastMethod);
+ fBitmapFilter = nullptr;
switch(method) {
case SkBitmapScaler::RESIZE_BOX:
fBitmapFilter = new SkBoxFilter;
@@ -82,10 +82,6 @@ SkResizeFilter::SkResizeFilter(SkBitmapScaler::ResizeMethod method,
case SkBitmapScaler::RESIZE_LANCZOS3:
fBitmapFilter = new SkLanczosFilter;
break;
- default:
- // NOTREACHED:
- fBitmapFilter = new SkMitchellFilter(1.f / 3.f, 1.f / 3.f);
- break;
}
@@ -214,43 +210,8 @@ void SkResizeFilter::computeFilters(int srcSize,
}
}
-static SkBitmapScaler::ResizeMethod ResizeMethodToAlgorithmMethod(
- SkBitmapScaler::ResizeMethod method) {
- // Convert any "Quality Method" into an "Algorithm Method"
- if (method >= SkBitmapScaler::RESIZE_FIRST_ALGORITHM_METHOD &&
- method <= SkBitmapScaler::RESIZE_LAST_ALGORITHM_METHOD) {
- return method;
- }
- // The call to SkBitmapScalerGtv::Resize() above took care of
- // GPU-acceleration in the cases where it is possible. So now we just
- // pick the appropriate software method for each resize quality.
- switch (method) {
- // Users of RESIZE_GOOD are willing to trade a lot of quality to
- // get speed, allowing the use of linear resampling to get hardware
- // acceleration (SRB). Hence any of our "good" software filters
- // will be acceptable, so we use a triangle.
- case SkBitmapScaler::RESIZE_GOOD:
- return SkBitmapScaler::RESIZE_TRIANGLE;
- // Users of RESIZE_BETTER are willing to trade some quality in order
- // to improve performance, but are guaranteed not to devolve to a linear
- // resampling. In visual tests we see that Hamming-1 is not as good as
- // Lanczos-2, however it is about 40% faster and Lanczos-2 itself is
- // about 30% faster than Lanczos-3. The use of Hamming-1 has been deemed
- // an acceptable trade-off between quality and speed.
- case SkBitmapScaler::RESIZE_BETTER:
- return SkBitmapScaler::RESIZE_HAMMING;
- default:
-#ifdef SK_HIGH_QUALITY_IS_LANCZOS
- return SkBitmapScaler::RESIZE_LANCZOS3;
-#else
- return SkBitmapScaler::RESIZE_MITCHELL;
-#endif
- }
-}
-
bool SkBitmapScaler::Resize(SkBitmap* resultPtr, const SkPixmap& source, ResizeMethod method,
- float destWidth, float destHeight,
- SkBitmap::Allocator* allocator) {
+ int destWidth, int destHeight, SkBitmap::Allocator* allocator) {
if (nullptr == source.addr() || source.colorType() != kN32_SkColorType ||
source.width() < 1 || source.height() < 1)
{
@@ -258,27 +219,13 @@ bool SkBitmapScaler::Resize(SkBitmap* resultPtr, const SkPixmap& source, ResizeM
}
if (destWidth < 1 || destHeight < 1) {
- // todo: seems like we could handle negative dstWidth/Height, since that
- // is just a negative scale (flip)
return false;
}
SkConvolutionProcs convolveProcs= { 0, nullptr, nullptr, nullptr, nullptr };
PlatformConvolutionProcs(&convolveProcs);
- SkRect destSubset = { 0, 0, destWidth, destHeight };
-
- // Ensure that the ResizeMethod enumeration is sound.
- SkASSERT(((RESIZE_FIRST_QUALITY_METHOD <= method) &&
- (method <= RESIZE_LAST_QUALITY_METHOD)) ||
- ((RESIZE_FIRST_ALGORITHM_METHOD <= method) &&
- (method <= RESIZE_LAST_ALGORITHM_METHOD)));
-
- method = ResizeMethodToAlgorithmMethod(method);
-
- // Check that we deal with an "algorithm methods" from this point onward.
- SkASSERT((SkBitmapScaler::RESIZE_FIRST_ALGORITHM_METHOD <= method) &&
- (method <= SkBitmapScaler::RESIZE_LAST_ALGORITHM_METHOD));
+ SkRect destSubset = SkRect::MakeIWH(destWidth, destHeight);
SkResizeFilter filter(method, source.width(), source.height(),
destWidth, destHeight, destSubset, convolveProcs);
« no previous file with comments | « src/core/SkBitmapScaler.h ('k') | tests/SkResourceCacheTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698