• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
11 #include "SkSingleInputImageFilter.h"
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 
21 class SK_API SkBicubicImageFilter : public SkSingleInputImageFilter {
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 
30     SkBicubicImageFilter(const SkSize& scale, const SkScalar coefficients[16], SkImageFilter* input = NULL);
31     static SkBicubicImageFilter* CreateMitchell(const SkSize& scale, SkImageFilter* input = NULL);
32     virtual ~SkBicubicImageFilter();
33 
34     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBicubicImageFilter)
35 
36 protected:
37     SkBicubicImageFilter(SkFlattenableReadBuffer& buffer);
38     virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
39 
40     virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
41                                SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
42 
43 #if SK_SUPPORT_GPU
canFilterImageGPU()44     virtual bool canFilterImageGPU() const SK_OVERRIDE { return true; }
45     virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, SkBitmap* result) SK_OVERRIDE;
46 #endif
47 
48 private:
49     SkSize    fScale;
50     SkScalar  fCoefficients[16];
51     typedef SkSingleInputImageFilter INHERITED;
52 };
53 
54 #endif
55