Home | History | Annotate | Download | only in effects
      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     /** 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],
     31                          SkImageFilter* input = NULL);
     32     static SkBicubicImageFilter* CreateMitchell(const SkSize& scale, SkImageFilter* input = NULL);
     33     virtual ~SkBicubicImageFilter();
     34 
     35     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBicubicImageFilter)
     36 
     37 protected:
     38     SkBicubicImageFilter(SkFlattenableReadBuffer& buffer);
     39     virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
     40 
     41     virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
     42                                SkBitmap* result, SkIPoint* loc) SK_OVERRIDE;
     43 
     44 #if SK_SUPPORT_GPU
     45     virtual bool canFilterImageGPU() const SK_OVERRIDE { return true; }
     46     virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
     47                                 SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
     48 #endif
     49 
     50 private:
     51     SkSize    fScale;
     52     SkScalar  fCoefficients[16];
     53     typedef SkImageFilter INHERITED;
     54 };
     55 
     56 #endif
     57