SkMorphologyImageFilter.h revision 05054f1a78a697b507580d0025db6c90423e033f
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    SK_DECLARE_FLATTENABLE_REGISTRAR()
41
42    typedef SkMorphologyImageFilter INHERITED;
43};
44
45class SK_API SkErodeImageFilter : public SkMorphologyImageFilter {
46public:
47    SkErodeImageFilter(int radiusX, int radiusY) : INHERITED(radiusX, radiusY) {}
48    explicit SkErodeImageFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
49
50    virtual bool asAnErode(SkISize* radius) const SK_OVERRIDE;
51    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const SkMatrix&,
52                               SkBitmap* result, SkIPoint* offset) SK_OVERRIDE;
53
54    static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
55        return SkNEW_ARGS(SkErodeImageFilter, (buffer));
56    }
57    virtual Factory getFactory() SK_OVERRIDE { return CreateProc; }
58    SK_DECLARE_FLATTENABLE_REGISTRAR()
59
60private:
61    typedef SkMorphologyImageFilter INHERITED;
62};
63
64#endif
65
66