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

Side by Side Diff: src/core/SkBitmapScaler.cpp

Issue 188743002: Avoid recomputing two consecutive identical 1D filters. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 6 years, 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #include "SkBitmapScaler.h" 1 #include "SkBitmapScaler.h"
2 #include "SkBitmapFilter.h" 2 #include "SkBitmapFilter.h"
3 #include "SkRect.h" 3 #include "SkRect.h"
4 #include "SkTArray.h" 4 #include "SkTArray.h"
5 #include "SkErrorInternals.h" 5 #include "SkErrorInternals.h"
6 #include "SkConvolver.h" 6 #include "SkConvolver.h"
7 7
8 // SkResizeFilter -------------------------------------------------------------- -- 8 // SkResizeFilter -------------------------------------------------------------- --
9 9
10 // Encapsulates computation and storage of the filters required for one complete 10 // Encapsulates computation and storage of the filters required for one complete
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 } 82 }
83 83
84 84
85 float scaleX = static_cast<float>(destWidth) / 85 float scaleX = static_cast<float>(destWidth) /
86 static_cast<float>(srcFullWidth); 86 static_cast<float>(srcFullWidth);
87 float scaleY = static_cast<float>(destHeight) / 87 float scaleY = static_cast<float>(destHeight) /
88 static_cast<float>(srcFullHeight); 88 static_cast<float>(srcFullHeight);
89 89
90 this->computeFilters(srcFullWidth, destSubset.fLeft, destSubset.width(), 90 this->computeFilters(srcFullWidth, destSubset.fLeft, destSubset.width(),
91 scaleX, &fXFilter, convolveProcs); 91 scaleX, &fXFilter, convolveProcs);
92 this->computeFilters(srcFullHeight, destSubset.fTop, destSubset.height(), 92 if (srcFullWidth == srcFullHeight &&
93 scaleY, &fYFilter, convolveProcs); 93 destSubset.fLeft == destSubset.fTop &&
94 destSubset.width() == destSubset.height()&&
95 scaleX == scaleY) {
96 fYFilter = fXFilter;
97 } else {
98 this->computeFilters(srcFullHeight, destSubset.fTop, destSubset.height() ,
99 scaleY, &fYFilter, convolveProcs);
100 }
94 } 101 }
95 102
96 // TODO(egouriou): Take advantage of periods in the convolution. 103 // TODO(egouriou): Take advantage of periods in the convolution.
97 // Practical resizing filters are periodic outside of the border area. 104 // Practical resizing filters are periodic outside of the border area.
98 // For Lanczos, a scaling by a (reduced) factor of p/q (q pixels in the 105 // For Lanczos, a scaling by a (reduced) factor of p/q (q pixels in the
99 // source become p pixels in the destination) will have a period of p. 106 // source become p pixels in the destination) will have a period of p.
100 // A nice consequence is a period of 1 when downscaling by an integral 107 // A nice consequence is a period of 1 when downscaling by an integral
101 // factor. Downscaling from typical display resolutions is also bound 108 // factor. Downscaling from typical display resolutions is also bound
102 // to produce interesting periods as those are chosen to have multiple 109 // to produce interesting periods as those are chosen to have multiple
103 // small factors. 110 // small factors.
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 bool SkBitmapScaler::Resize(SkBitmap* resultPtr, 321 bool SkBitmapScaler::Resize(SkBitmap* resultPtr,
315 const SkBitmap& source, 322 const SkBitmap& source,
316 ResizeMethod method, 323 ResizeMethod method,
317 int destWidth, int destHeight, 324 int destWidth, int destHeight,
318 const SkConvolutionProcs& convolveProcs, 325 const SkConvolutionProcs& convolveProcs,
319 SkBitmap::Allocator* allocator) { 326 SkBitmap::Allocator* allocator) {
320 SkIRect destSubset = { 0, 0, destWidth, destHeight }; 327 SkIRect destSubset = { 0, 0, destWidth, destHeight };
321 return Resize(resultPtr, source, method, destWidth, destHeight, destSubset, 328 return Resize(resultPtr, source, method, destWidth, destHeight, destSubset,
322 convolveProcs, allocator); 329 convolveProcs, allocator);
323 } 330 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698