senorblanco@chromium.org | 3f2d45a | 2013-01-18 20:48:20 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2013 The Android Open Source Project |
| 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 SkBicubicImageFilter_DEFINED |
| 9 | #define SkBicubicImageFilter_DEFINED |
| 10 | |
senorblanco@chromium.org | 377c14a | 2013-02-04 22:57:21 +0000 | [diff] [blame] | 11 | #include "SkImageFilter.h" |
senorblanco@chromium.org | 3f2d45a | 2013-01-18 20:48:20 +0000 | [diff] [blame] | 12 | #include "SkScalar.h" |
| 13 | #include "SkSize.h" |
| 14 | #include "SkPoint.h" |
| 15 | |
| 16 | /*! \class SkBicubicImageFilter |
| 17 | Bicubic resampling image filter. This filter does a 16-tap bicubic |
| 18 | filter using the given matrix. |
| 19 | */ |
| 20 | |
senorblanco@chromium.org | 377c14a | 2013-02-04 22:57:21 +0000 | [diff] [blame] | 21 | class SK_API SkBicubicImageFilter : public SkImageFilter { |
senorblanco@chromium.org | 3f2d45a | 2013-01-18 20:48:20 +0000 | [diff] [blame] | 22 | public: |
| 23 | /** Construct a (scaling-only) bicubic resampling image filter. |
| 24 | @param scale How much to scale the image. |
| 25 | @param coefficients The 16 coefficients of the bicubic matrix. |
| 26 | @param input The input image filter. If NULL, the src bitmap |
| 27 | passed to filterImage() is used instead. |
| 28 | */ |
| 29 | |
senorblanco@chromium.org | ccf225c | 2013-07-22 20:03:22 +0000 | [diff] [blame^] | 30 | SkBicubicImageFilter(const SkSize& scale, |
| 31 | const SkScalar coefficients[16], |
commit-bot@chromium.org | 7b32070 | 2013-07-10 21:22:18 +0000 | [diff] [blame] | 32 | SkImageFilter* input = NULL); |
senorblanco@chromium.org | 3f2d45a | 2013-01-18 20:48:20 +0000 | [diff] [blame] | 33 | static SkBicubicImageFilter* CreateMitchell(const SkSize& scale, SkImageFilter* input = NULL); |
| 34 | virtual ~SkBicubicImageFilter(); |
| 35 | |
| 36 | SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBicubicImageFilter) |
| 37 | |
| 38 | protected: |
| 39 | SkBicubicImageFilter(SkFlattenableReadBuffer& buffer); |
| 40 | virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE; |
| 41 | |
| 42 | virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&, |
| 43 | SkBitmap* result, SkIPoint* loc) SK_OVERRIDE; |
| 44 | |
| 45 | #if SK_SUPPORT_GPU |
| 46 | virtual bool canFilterImageGPU() const SK_OVERRIDE { return true; } |
commit-bot@chromium.org | 7b32070 | 2013-07-10 21:22:18 +0000 | [diff] [blame] | 47 | virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, SkBitmap* result, |
| 48 | SkIPoint* offset) SK_OVERRIDE; |
senorblanco@chromium.org | 3f2d45a | 2013-01-18 20:48:20 +0000 | [diff] [blame] | 49 | #endif |
| 50 | |
| 51 | private: |
| 52 | SkSize fScale; |
| 53 | SkScalar fCoefficients[16]; |
senorblanco@chromium.org | 377c14a | 2013-02-04 22:57:21 +0000 | [diff] [blame] | 54 | typedef SkImageFilter INHERITED; |
senorblanco@chromium.org | 3f2d45a | 2013-01-18 20:48:20 +0000 | [diff] [blame] | 55 | }; |
| 56 | |
| 57 | #endif |