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
74
75
76
77
78
79
80
81
82
83
|
#include <algorithm>
namespace meow{
template<class T>
inline RGB<T>::RGB(){ }
template<class T>
inline RGB<T>::RGB(T const& r, T const& g, T const& b){
rgb_[0] = r; rgb_[1] = g; rgb_[2] = b;
}
template<class T>
inline RGB<T>::RGB(T const* rgb){
for(int i = 0; i < 3; i++){
rgb_[i] = rgb[i];
}
}
template<class T>
inline T RGB<T>::r() const { return rgb_[0]; }
template<class T>
inline T RGB<T>::g() const { return rgb_[1]; }
template<class T>
inline T RGB<T>::b() const { return rgb_[2]; }
template<class T>
inline T RGB<T>::rgb(size_t i) const {
return rgb_[std::min((size_t)3 - 1, i)];
}
template<class T>
inline T RGB<T>::bgr(size_t i) const { return rgb(2 - i); }
/////////////////// **# setting #** ////////////////
template<class T>
inline T RGB<T>::r(T const& val){ return (rgb_[0] = val); }
template<class T>
inline T RGB<T>::g(T const& val){ return (rgb_[1] = val); }
template<class T>
inline T RGB<T>::b(T const& val){ return (rgb_[2] = val); }
template<class T>
inline T RGB<T>::rgb(size_t i, T const& val){
i = std::min((size_t)3 - 1, i);
return (rgb_[i] = val);
}
template<class T>
inline T RGB<T>::bgr(size_t i, T const& val){
return rgb(2 - i, val);
}
inline RGBf::RGBf(): RGB(0.0, 0.0, 0.0){ }
inline RGBf::~RGBf(){ }
inline RGBf::RGBf(double const&r,double const&g,double const&b):RGB(r,g,b){}
inline RGBf::RGBf(double const* rgb): RGB(rgb){ }
inline double RGBf::rMin() const { return 0.0; }
inline double RGBf::rMax() const { return 1.0; }
inline double RGBf::gMin() const { return 0.0; }
inline double RGBf::gMax() const { return 1.0; }
inline double RGBf::bMin() const { return 0.0; }
inline double RGBf::bMax() const { return 1.0; }
inline RGBi::RGBi (): RGB(0.0, 0.0, 0.0){ }
inline RGBi::~RGBi(){ }
inline RGBi::RGBi(int32_t const&r,int32_t const&g,int32_t const&b):RGB(r,g,b)
{}
inline RGBi::RGBi(int32_t const* rgb): RGB(rgb){ }
inline int32_t RGBi::rMin() const { return 0; }
inline int32_t RGBi::rMax() const { return 255; }
inline int32_t RGBi::gMin() const { return 0; }
inline int32_t RGBi::gMax() const { return 255; }
inline int32_t RGBi::bMin() const { return 0; }
inline int32_t RGBi::bMax() const { return 255; }
template<class RGB_T1, class RGB_T2>
inline void RGB_to_RGB(RGB<RGB_T1> const& a, RGB<RGB_T2>* b){
double r = normalize(a.rMin(), a.rMax(), a.r());
double g = normalize(a.gMin(), a.gMax(), a.g());
double x = normalize(a.bMin(), a.bMax(), a.b());
b->r(denormalize(b->rMin(), b->rMax(), r));
b->g(denormalize(b->gMin(), b->gMax(), g));
b->b(denormalize(b->bMin(), b->bMax(), x));
}
}
|