SkBicubicImageFilter.h revision 377c14a1e648f4427bd11474fad8ac264d98aff2
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
21class SK_API SkBicubicImageFilter : public SkImageFilter {
22public:
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
36protected:
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
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
48private:
49    SkSize    fScale;
50    SkScalar  fCoefficients[16];
51    typedef SkImageFilter INHERITED;
52};
53
54#endif
55