SkMorphologyImageFilter.h revision b295fb6ff3222453912dfcb7a1ea5184d40014b5
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, const CropRect* cropRect);
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,
36                        SkImageFilter* input = NULL,
37                        const CropRect* cropRect = NULL)
38    : INHERITED(radiusX, radiusY, input, cropRect) {}
39
40    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
41                               SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
42#if SK_SUPPORT_GPU
43    virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
44                                SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
45#endif
46
47    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDilateImageFilter)
48
49protected:
50    SkDilateImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
51
52private:
53    typedef SkMorphologyImageFilter INHERITED;
54};
55
56class SK_API SkErodeImageFilter : public SkMorphologyImageFilter {
57public:
58    SkErodeImageFilter(int radiusX, int radiusY,
59                       SkImageFilter* input = NULL,
60                       const CropRect* cropRect = NULL)
61    : INHERITED(radiusX, radiusY, input, cropRect) {}
62
63    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
64                               SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
65#if SK_SUPPORT_GPU
66    virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, const SkMatrix& ctm,
67                                SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
68#endif
69
70    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkErodeImageFilter)
71
72protected:
73    SkErodeImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
74
75private:
76    typedef SkMorphologyImageFilter INHERITED;
77};
78
79#endif
80