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_
|