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

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

Issue 25275004: store SkAlphaType inside SkBitmap, on road to support unpremul (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 2 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
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 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 280
281 // Get a source bitmap encompassing this touched area. We construct the 281 // Get a source bitmap encompassing this touched area. We construct the
282 // offsets and row strides such that it looks like a new bitmap, while 282 // offsets and row strides such that it looks like a new bitmap, while
283 // referring to the old data. 283 // referring to the old data.
284 const unsigned char* sourceSubset = 284 const unsigned char* sourceSubset =
285 reinterpret_cast<const unsigned char*>(source.getPixels()); 285 reinterpret_cast<const unsigned char*>(source.getPixels());
286 286
287 // Convolve into the result. 287 // Convolve into the result.
288 SkBitmap result; 288 SkBitmap result;
289 result.setConfig(SkBitmap::kARGB_8888_Config, 289 result.setConfig(SkBitmap::kARGB_8888_Config,
290 destSubset.width(), destSubset.height()); 290 destSubset.width(), destSubset.height(), 0,
291 source.alphaType());
291 result.allocPixels(allocator, NULL); 292 result.allocPixels(allocator, NULL);
292 if (!result.readyToDraw()) { 293 if (!result.readyToDraw()) {
293 return false; 294 return false;
294 } 295 }
295 296
296 BGRAConvolve2D(sourceSubset, static_cast<int>(source.rowBytes()), 297 BGRAConvolve2D(sourceSubset, static_cast<int>(source.rowBytes()),
297 !source.isOpaque(), filter.xFilter(), filter.yFilter(), 298 !source.isOpaque(), filter.xFilter(), filter.yFilter(),
298 static_cast<int>(result.rowBytes()), 299 static_cast<int>(result.rowBytes()),
299 static_cast<unsigned char*>(result.getPixels()), 300 static_cast<unsigned char*>(result.getPixels()),
300 convolveProcs, true); 301 convolveProcs, true);
301 302
302 // Preserve the "opaque" flag for use as an optimization later.
303 result.setIsOpaque(source.isOpaque());
304 *resultPtr = result; 303 *resultPtr = result;
305 return true; 304 return true;
306 } 305 }
307 306
308 // static 307 // static
309 bool SkBitmapScaler::Resize(SkBitmap* resultPtr, 308 bool SkBitmapScaler::Resize(SkBitmap* resultPtr,
310 const SkBitmap& source, 309 const SkBitmap& source,
311 ResizeMethod method, 310 ResizeMethod method,
312 int destWidth, int destHeight, 311 int destWidth, int destHeight,
313 const SkConvolutionProcs& convolveProcs, 312 const SkConvolutionProcs& convolveProcs,
314 SkBitmap::Allocator* allocator) { 313 SkBitmap::Allocator* allocator) {
315 SkIRect destSubset = { 0, 0, destWidth, destHeight }; 314 SkIRect destSubset = { 0, 0, destWidth, destHeight };
316 return Resize(resultPtr, source, method, destWidth, destHeight, destSubset, 315 return Resize(resultPtr, source, method, destWidth, destHeight, destSubset,
317 convolveProcs, allocator); 316 convolveProcs, allocator);
318 } 317 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698