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
69
70
71
72
73
|
#ifndef colors_HSV_H_
#define colors_HSV_H_
#include "RGB.h"
#include "YUV.h"
#include "HSL.h"
#include <cstdlib>
namespace meow{
template<class T>
class HSV{
protected:
T hsv_[3];
HSV();
HSV(T const& h, T const& s, T const& v);
HSV(T const* hsv);
public:
virtual ~HSV(){ }
///////////////// **# not force #** ////////////////
virtual T hMax() const = 0;
virtual T hMin() const = 0;
virtual T sMax() const = 0;
virtual T sMin() const = 0;
virtual T vMax() const = 0;
virtual T vMin() const = 0;
/////////////////// **# access #** /////////////////
T h() const;
T s() const;
T v() const;
T hsv(size_t i) const;
T vsh(size_t i) const;
/////////////////// **# setting #** ////////////////
T h(T const& val);
T s(T const& val);
T v(T const& val);
T hsv(size_t i, T const& val);
T vsh(size_t i, T const& val);
};
class HSVf: public HSV<double>{
public:
HSVf();
~HSVf();
HSVf(double const&h,double const&s,double const&v);
HSVf(double const* hsv);
double hMin() const;
double hMax() const;
double sMin() const;
double sMax() const;
double vMin() const;
double vMax() const;
};
template<class HSV_T1, class HSV_T2>
inline void HSV_to_HSV(HSV<HSV_T1> const& a, HSV<HSV_T2>* b);
template<class RGB_T, class HSV_T>
inline void RGB_to_HSV(RGB<RGB_T> const& rgb, HSV<HSV_T>* hsv);
template<class HSV_T, class RGB_T>
inline void HSV_to_RGB(HSV<HSV_T> const& hsv, RGB<RGB_T>* rgb);
template<class YUV_T, class HSV_T>
inline void YUV_to_HSV(YUV<YUV_T> const& yuv, HSV<HSV_T>* hsv);
template<class HSV_T, class YUV_T>
inline void HSV_to_YUV(HSV<HSV_T> const& hsv, YUV<YUV_T>* yuv);
template<class HSL_T, class HSV_T>
inline void HSL_to_HSV(HSL<HSL_T> const& hsl, HSV<HSV_T>* hsv);
template<class HSV_T, class HSL_T>
inline void HSV_to_HSL(HSV<HSV_T> const& hsv, HSL<HSL_T>* hsl);
}
#include "HSV.hpp"
#endif // colors_HSV_H_
|