1 /* 2 * Copyright 2013 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkBitmapScaler_DEFINED 9 #define SkBitmapScaler_DEFINED 10 11 #include "SkBitmap.h" 12 #include "SkConvolver.h" 13 14 /** \class SkBitmapScaler 15 16 Provides the interface for high quality image resampling. 17 */ 18 19 class SK_API SkBitmapScaler { 20 public: 21 enum ResizeMethod { 22 RESIZE_BOX, 23 RESIZE_TRIANGLE, 24 RESIZE_LANCZOS3, 25 RESIZE_HAMMING, 26 RESIZE_MITCHELL, 27 28 RESIZE_FirstMethod = RESIZE_BOX, 29 RESIZE_LastMethod = RESIZE_MITCHELL, 30 }; 31 32 /** 33 * Given already-allocated src and dst pixmaps, this will scale the src pixels using the 34 * specified resize-method and write the results into the pixels pointed to by dst. 35 */ 36 static bool Resize(const SkPixmap& dst, const SkPixmap& src, ResizeMethod method); 37 38 /** 39 * Helper function that manages allocating a bitmap to hold the dst pixels, and then calls 40 * the pixmap version of Resize. 41 */ 42 static bool Resize(SkBitmap* result, const SkPixmap& src, ResizeMethod method, 43 int dest_width, int dest_height, SkBitmap::Allocator* = nullptr); 44 45 /** Platforms can also optionally overwrite the convolution functions 46 if we have SIMD versions of them. 47 */ 48 49 static void PlatformConvolutionProcs(SkConvolutionProcs*); 50 }; 51 52 #endif 53