Skia
2DGraphicsLibrary
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SkMorphologyImageFilter.h
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 #ifndef SkMorphologyImageFilter_DEFINED
9 #define SkMorphologyImageFilter_DEFINED
10 
11 #include "SkColor.h"
12 #include "SkImageFilter.h"
13 #include "SkSize.h"
14 
16 class SK_API SkMorphologyImageFilter : public SkImageFilter {
17 public:
18  SkRect computeFastBounds(const SkRect& src) const override;
19  SkIRect onFilterNodeBounds(const SkIRect& src, const SkMatrix&, MapDirection) const override;
20 
28  typedef void (*Proc)(const SkPMColor* src, SkPMColor* dst, int radius,
29  int width, int height, int srcStride, int dstStride);
30 
31 protected:
32  enum Op {
33  kErode_Op,
34  kDilate_Op,
35  };
36 
37  virtual Op op() const = 0;
38 
39  SkMorphologyImageFilter(int radiusX, int radiusY,
41  const CropRect* cropRect);
42  sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source,
43  const Context&,
44  SkIPoint* offset) const override;
45  sk_sp<SkImageFilter> onMakeColorSpace(SkColorSpaceXformer*) const override;
46  void flatten(SkWriteBuffer&) const override;
47 
48  SkISize radius() const { return fRadius; }
49 
50 private:
51  SkISize fRadius;
52 
53  typedef SkImageFilter INHERITED;
54 };
55 
58 public:
59  static sk_sp<SkImageFilter> Make(int radiusX, int radiusY,
61  const CropRect* cropRect = nullptr);
62 
63  SK_TO_STRING_OVERRIDE()
64  SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkDilateImageFilter)
65 
66 protected:
67  Op op() const override { return kDilate_Op; }
68 
69 private:
70  SkDilateImageFilter(int radiusX, int radiusY,
72  const CropRect* cropRect)
73  : INHERITED(radiusX, radiusY, input, cropRect) {}
74 
76 };
77 
80 public:
81  static sk_sp<SkImageFilter> Make(int radiusX, int radiusY,
83  const CropRect* cropRect = nullptr);
84 
85  SK_TO_STRING_OVERRIDE()
86  SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkErodeImageFilter)
87 
88 protected:
89  Op op() const override { return kErode_Op; }
90 
91 private:
92  SkErodeImageFilter(int radiusX, int radiusY,
93  sk_sp<SkImageFilter> input, const CropRect* cropRect)
94  : INHERITED(radiusX, radiusY, input, cropRect) {}
95 
97 };
98 
99 #endif
Definition: SkImageFilter.h:76
void flatten(SkWriteBuffer &) const override
Override this if your subclass needs to record data that it will need to recreate itself from its Cre...
The SkMatrix class holds a 3x3 matrix for transforming coordinates.
Definition: SkMatrix.h:28
virtual sk_sp< SkSpecialImage > onFilterImage(SkSpecialImage *src, const Context &, SkIPoint *offset) const =0
This is the virtual which should be overridden by the derived class to perform image filtering...
Definition: SkRefCnt.h:125
Definition: SkMorphologyImageFilter.h:79
Base class for image filters.
Definition: SkImageFilter.h:36
Definition: SkSize.h:13
Definition: SkMorphologyImageFilter.h:57
uint32_t SkPMColor
32 bit ARGB color value, premultiplied.
Definition: SkColor.h:161
Definition: SkWriteBuffer.h:27
Definition: SkRect.h:404
Definition: SkMorphologyImageFilter.h:16
virtual SkIRect onFilterNodeBounds(const SkIRect &, const SkMatrix &, MapDirection) const
Performs a forwards or reverse mapping of the given rect to accommodate this filter's margin requirem...
SkIRect holds four 32 bit integer coordinates for a rectangle.
Definition: SkRect.h:20
SkIPoint holds two 32 bit integer coordinates.
Definition: SkPoint.h:40
Types and macros for colors.