SkMorphologyImageFilter.h revision a2ca41e3afdd8fad5e0e924dec029f33918e0a67
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
14class SK_API SkMorphologyImageFilter : public SkImageFilter {
15public:
16    explicit SkMorphologyImageFilter(SkFlattenableReadBuffer& buffer);
17    SkMorphologyImageFilter(int radiusX, int radiusY);
18
19protected:
20    virtual void flatten(SkFlattenableWriteBuffer& buffer) SK_OVERRIDE;
21    SkISize    radius() const { return fRadius; }
22
23private:
24    SkISize    fRadius;
25    typedef SkImageFilter INHERITED;
26};
27
28class SK_API SkDilateImageFilter : public SkMorphologyImageFilter {
29public:
30    SkDilateImageFilter(int radiusX, int radiusY) : INHERITED(radiusX, radiusY) {}
31    explicit SkDilateImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
32
33    virtual bool asADilate(SkISize* radius) const SK_OVERRIDE;
34    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
35                               SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
36    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
37        return SkNEW_ARGS(SkDilateImageFilter, (buffer));
38    }
39    virtual Factory getFactory() SK_OVERRIDE { return CreateProc; }
40
41    typedef SkMorphologyImageFilter INHERITED;
42};
43
44class SK_API SkErodeImageFilter : public SkMorphologyImageFilter {
45public:
46    SkErodeImageFilter(int radiusX, int radiusY) : INHERITED(radiusX, radiusY) {}
47    explicit SkErodeImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
48
49    virtual bool asAnErode(SkISize* radius) const SK_OVERRIDE;
50    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
51                               SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
52
53    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
54        return SkNEW_ARGS(SkErodeImageFilter, (buffer));
55    }
56    virtual Factory getFactory() SK_OVERRIDE { return CreateProc; }
57
58private:
59    typedef SkMorphologyImageFilter INHERITED;
60};
61
62#endif
63
64