SkMorphologyImageFilter.h revision e16efc1882ab34a0bb3ae361a2d37f840044cf87
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 "SkSingleInputImageFilter.h"
13#include "SkSize.h"
14
15class SK_API SkMorphologyImageFilter : public SkSingleInputImageFilter {
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 SkSingleInputImageFilter 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 GrTexture* filterImageGPU(Proxy* proxy, GrTexture* src,
42                                      const SkRect& rect) SK_OVERRIDE;
43#endif
44
45    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDilateImageFilter)
46
47protected:
48    SkDilateImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
49
50private:
51    typedef SkMorphologyImageFilter INHERITED;
52};
53
54class SK_API SkErodeImageFilter : public SkMorphologyImageFilter {
55public:
56    SkErodeImageFilter(int radiusX, int radiusY, SkImageFilter* input = NULL)
57    : INHERITED(radiusX, radiusY, input) {}
58
59    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
60                               SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
61#if SK_SUPPORT_GPU
62    virtual GrTexture* filterImageGPU(Proxy* proxy, GrTexture* src,
63                                      const SkRect& rect) SK_OVERRIDE;
64#endif
65
66    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkErodeImageFilter)
67
68protected:
69    SkErodeImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
70
71private:
72    typedef SkMorphologyImageFilter INHERITED;
73};
74
75#endif
76