blob: 669636543395c3cbe63a890253bf5bb95a57388b [file] [log] [blame]
senorblanco@chromium.org3f2d45a2013-01-18 20:48:20 +00001/*
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
senorblanco@chromium.org377c14a2013-02-04 22:57:21 +000011#include "SkImageFilter.h"
senorblanco@chromium.org3f2d45a2013-01-18 20:48:20 +000012#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
senorblanco@chromium.org377c14a2013-02-04 22:57:21 +000021class SK_API SkBicubicImageFilter : public SkImageFilter {
senorblanco@chromium.org3f2d45a2013-01-18 20:48:20 +000022public:
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
senorblanco@chromium.orgccf225c2013-07-22 20:03:22 +000030 SkBicubicImageFilter(const SkSize& scale,
31 const SkScalar coefficients[16],
commit-bot@chromium.org7b320702013-07-10 21:22:18 +000032 SkImageFilter* input = NULL);
senorblanco@chromium.org3f2d45a2013-01-18 20:48:20 +000033 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; }
commit-bot@chromium.org7b320702013-07-10 21:22:18 +000047 virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, SkBitmap* result,
48 SkIPoint* offset) SK_OVERRIDE;
senorblanco@chromium.org3f2d45a2013-01-18 20:48:20 +000049#endif
50
51private:
52 SkSize fScale;
53 SkScalar fCoefficients[16];
senorblanco@chromium.org377c14a2013-02-04 22:57:21 +000054 typedef SkImageFilter INHERITED;
senorblanco@chromium.org3f2d45a2013-01-18 20:48:20 +000055};
56
57#endif