SkMorphologyImageFilter.h revision bf2768bab9f3b21c03a8f9a75dc891231d5857cc
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    virtual bool canFilterImageGPU() const SK_OVERRIDE { return true; }
23
24    SkISize    radius() const { return fRadius; }
25
26private:
27    SkISize    fRadius;
28    typedef SkSingleInputImageFilter INHERITED;
29};
30
31class SK_API SkDilateImageFilter : public SkMorphologyImageFilter {
32public:
33    SkDilateImageFilter(int radiusX, int radiusY, SkImageFilter* input = NULL)
34    : INHERITED(radiusX, radiusY, input) {}
35
36    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
37                               SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
38    virtual GrTexture* onFilterImageGPU(GrTexture* src, const SkRect& rect) SK_OVERRIDE;
39
40    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDilateImageFilter)
41
42protected:
43    SkDilateImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
44
45private:
46    typedef SkMorphologyImageFilter INHERITED;
47};
48
49class SK_API SkErodeImageFilter : public SkMorphologyImageFilter {
50public:
51    SkErodeImageFilter(int radiusX, int radiusY, SkImageFilter* input = NULL)
52    : INHERITED(radiusX, radiusY, input) {}
53
54    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
55                               SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
56    virtual GrTexture* onFilterImageGPU(GrTexture* src, const SkRect& rect) SK_OVERRIDE;
57
58    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkErodeImageFilter)
59
60protected:
61    SkErodeImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
62
63private:
64    typedef SkMorphologyImageFilter INHERITED;
65};
66
67#endif
68
69