aboutsummaryrefslogtreecommitdiffstats
path: root/meowpp/colors/HSL.h
blob: db31f0afef7357c613a27f3c6d57111b0d12164d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#ifndef   colors_HSL_H_
#define   colors_HSL_H_

#include "RGB.h"
#include "YUV.h"

#include <cstdlib>

namespace meow{
  template<class T>
  class HSL{
    protected:
      T hsl_[3];
      HSL();
      HSL(T const& h, T const& s, T const& l);
      HSL(T const* hsl);
    public:
      virtual ~HSL(){ }
      ///////////////// **# not force #** ////////////////
      virtual T hMax() const = 0;
      virtual T hMin() const = 0;
      virtual T sMax() const = 0;
      virtual T sMin() const = 0;
      virtual T lMax() const = 0;
      virtual T lMin() const = 0;
      /////////////////// **# access #** /////////////////
      T h()           const;
      T s()           const;
      T l()           const;
      T hsl(size_t i) const;
      T lsh(size_t i) const;
      /////////////////// **# setting #** ////////////////
      T h(T const& val);
      T s(T const& val);
      T l(T const& val);
      T hsl(size_t i, T const& val);
      T lsh(size_t i, T const& val);
  };

  class HSLf: public HSL<double>{
    public:
      HSLf();
      ~HSLf();
      HSLf(double const&h,double const&s,double const&l);
      HSLf(double const* hsl);
      double hMin() const;
      double hMax() const;
      double sMin() const;
      double sMax() const;
      double lMin() const;
      double lMax() const;
  };

  template<class HSL_T1, class HSL_T2>
  inline void HSL_to_HSL(HSL<HSL_T1> const& a, HSL<HSL_T2>* b);
  template<class RGB_T, class HSL_T>
  inline void RGB_to_HSL(RGB<RGB_T> const& rgb, HSL<HSL_T>* hsl);
  template<class HSL_T, class RGB_T>
  inline void HSL_to_RGB(HSL<HSL_T> const& hsl, RGB<RGB_T>* rgb);
  template<class YUV_T, class HSL_T>
  inline void YUV_to_HSL(YUV<YUV_T> const& yuv, HSL<HSL_T>* hsl);
  template<class HSL_T, class YUV_T>
  inline void HSL_to_YUV(HSL<HSL_T> const& hsl, YUV<YUV_T>* yuv);
}

#include "HSL.hpp"

#endif // colors_HSL_H_