SkBicubicImageFilter.h revision ae761f7545d8ebf181d220169afac2056b057b8c
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],
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
37protected:
38    SkBicubicImageFilter(SkReadBuffer& buffer);
39    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
40
41    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
42                               SkBitmap* result, SkIPoint* loc) const 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) const SK_OVERRIDE;
48#endif
49
50private:
51    SkSize    fScale;
52    SkScalar  fCoefficients[16];
53    typedef SkImageFilter INHERITED;
54};
55
56#endif
57