• 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 "SkImageFilter.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 SkImageFilter {
22 public:
23     virtual ~SkBicubicImageFilter();
24 
25     static SkBicubicImageFilter* CreateMitchell(const SkSize& scale, SkImageFilter* input = NULL);
26 
27     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBicubicImageFilter)
28 
29 protected:
30     /** Construct a (scaling-only) bicubic resampling image filter.
31         @param scale        How much to scale the image.
32         @param coefficients The 16 coefficients of the bicubic matrix.
33         @param input        The input image filter.  If NULL, the src bitmap
34                             passed to filterImage() is used instead.
35     */
36     SkBicubicImageFilter(const SkSize& scale, const SkScalar coefficients[16],
37                          SkImageFilter* input = NULL);
38     SkBicubicImageFilter(SkReadBuffer& buffer);
39     virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
40 
41     virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
42                                SkBitmap* result, SkIPoint* loc) const SK_OVERRIDE;
43 
44 #if SK_SUPPORT_GPU
canFilterImageGPU()45     virtual bool canFilterImageGPU() const SK_OVERRIDE { return true; }
46     virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, const Context& ctx,
47                                 SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE;
48 #endif
49 
50 private:
51     SkSize    fScale;
52     SkScalar  fCoefficients[16];
53     typedef SkImageFilter INHERITED;
54 };
55 
56 #endif
57