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