• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017 Google Inc.
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 SkGaussFilter_DEFINED
9 #define SkGaussFilter_DEFINED
10 
11 #include <cstddef>
12 
13 // Define gaussian filters for values of sigma < 2. Produce values good to 1 part in 1,000,000.
14 // Produces values as defined in "Scale-Space for Discrete Signals" by Tony Lindeberg.
15 class SkGaussFilter {
16 public:
17     inline static constexpr int kGaussArrayMax = 6;
18 
19     explicit SkGaussFilter(double sigma);
20 
size()21     size_t size()   const { return fN; }
radius()22     int radius() const { return fN - 1; }
width()23     int width()  const { return 2 * this->radius() + 1; }
24 
25     // Allow a filter to be used in a C++ ranged-for loop.
begin()26     const double* begin() const { return &fBasis[0];  }
end()27     const double* end()   const { return &fBasis[fN]; }
28 
29 private:
30     double fBasis[kGaussArrayMax];
31     int    fN;
32 };
33 
34 #endif  // SkGaussFilter_DEFINED
35