SkMorphologyImageFilter.h revision 377c14a1e648f4427bd11474fad8ac264d98aff2
1/*
2 * Copyright 2012 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
9#ifndef SkMorphologyImageFilter_DEFINED
10#define SkMorphologyImageFilter_DEFINED
11
12#include "SkImageFilter.h"
13#include "SkSize.h"
14
15class SK_API SkMorphologyImageFilter : public SkImageFilter {
16public:
17    SkMorphologyImageFilter(int radiusX, int radiusY, SkImageFilter* input);
18
19protected:
20    SkMorphologyImageFilter(SkFlattenableReadBuffer& buffer);
21    virtual void flatten(SkFlattenableWriteBuffer&) const SK_OVERRIDE;
22#if SK_SUPPORT_GPU
23    virtual bool canFilterImageGPU() const SK_OVERRIDE { return true; }
24#endif
25
26    SkISize    radius() const { return fRadius; }
27
28private:
29    SkISize    fRadius;
30    typedef SkImageFilter INHERITED;
31};
32
33class SK_API SkDilateImageFilter : public SkMorphologyImageFilter {
34public:
35    SkDilateImageFilter(int radiusX, int radiusY, SkImageFilter* input = NULL)
36    : INHERITED(radiusX, radiusY, input) {}
37
38    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
39                               SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
40#if SK_SUPPORT_GPU
41    virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, SkBitmap* result) SK_OVERRIDE;
42#endif
43
44    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDilateImageFilter)
45
46protected:
47    SkDilateImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
48
49private:
50    typedef SkMorphologyImageFilter INHERITED;
51};
52
53class SK_API SkErodeImageFilter : public SkMorphologyImageFilter {
54public:
55    SkErodeImageFilter(int radiusX, int radiusY, SkImageFilter* input = NULL)
56    : INHERITED(radiusX, radiusY, input) {}
57
58    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
59                               SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
60#if SK_SUPPORT_GPU
61    virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, SkBitmap* result) SK_OVERRIDE;
62#endif
63
64    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkErodeImageFilter)
65
66protected:
67    SkErodeImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
68
69private:
70    typedef SkMorphologyImageFilter INHERITED;
71};
72
73#endif
74