Templates -- Meow  1.2.11
A C++ template contains kinds of interesting classes and functions
RGB_Space.h
Go to the documentation of this file.
1 #ifndef colors_RGB_Space_H__
2 #define colors_RGB_Space_H__
3 
4 #include "Color3_Space.h"
5 #include "../geo/Vectors.h"
6 #include "../math/utility.h"
7 
8 #include <cstdlib>
9 
10 namespace meow {
11 
19 class RGBi_Space: public Color3_Space<int> {
20 public:
22  Vector3D<int>(255, 255, 255),
23  Vector3D<int>( 0, 0, 0)) {
24  }
25  RGBi_Space(int c): Color3_Space<int>(Vector3D<int>( 0, 0, 0),
26  Vector3D<int>(255, 255, 255),
27  Vector3D<int>( c, c, c)) {
28  }
30  Color3_Space<int>(Vector3D<int>( 0, 0, 0),
31  Vector3D<int>(255, 255, 255),
32  Vector3D<int>(v)) {
33  }
35  }
37  }
38  int const& rgbMin(size_t i) const { return min(i); }
39  int const& rMin( ) const { return min(0); }
40  int const& gMin( ) const { return min(1); }
41  int const& bMin( ) const { return min(2); }
42  int const& rgbMax(size_t i) const { return max(i); }
43  int const& rMax( ) const { return max(0); }
44  int const& gMax( ) const { return max(1); }
45  int const& bMax( ) const { return max(2); }
46  int const& rgb(size_t i) const { return val(i); }
47  int const& r( ) const { return rgb(0); }
48  int const& g( ) const { return rgb(1); }
49  int const& b( ) const { return rgb(2); }
50  int const& rgb(size_t i, int c) { return val(i, c); }
51  int const& r( int c) { return rgb(0, c); }
52  int const& g( int c) { return rgb(1, c); }
53  int const& b( int c) { return rgb(2, c); }
54  int& rgbGet(size_t i) { return valGet(i); }
55  int& rGet( ) { return rgbGet(0); }
56  int& gGet( ) { return rgbGet(1); }
57  int& bGet( ) { return rgbGet(2); }
59  copyFrom(b);
60  return *this;
61  }
62  RGBi_Space operator+(RGBi_Space const& b) const {
63  return RGBi_Space(val_ + b.val_);
64  }
65  RGBi_Space operator-(RGBi_Space const& b) const {
66  return RGBi_Space(val_ - b.val_);
67  }
68  RGBi_Space operator*(int c) const {
69  return RGBi_Space(val_ * c);
70  }
71  RGBi_Space operator/(int c) const {
72  return RGBi_Space(val_ / c);
73  }
74  int operator*(RGBi_Space const& b) const {
75  return val_ * b.val_;
76  }
77 };
78 
86 class RGBf_Space: public Color3_Space<double> {
87 public:
89  Vector3D<double>(1.0, 1.0, 1.0),
90  Vector3D<double>(0.0, 0.0, 0.0)) {
91  }
92  RGBf_Space(double c): Color3_Space<double>(Vector3D<double>(0.0, 0.0, 0.0),
93  Vector3D<double>(1.0, 1.0, 1.0),
94  Vector3D<double>( c, c, c)) {
95  }
97  Color3_Space<double>(Vector3D<double>(0.0, 0.0, 0.0),
98  Vector3D<double>(1.0, 1.0, 1.0),
99  Vector3D<double>(v)) {
100  }
102  }
104  }
105  double const& rgbMin(size_t i) const { return min(i); }
106  double const& rMin( ) const { return min(0); }
107  double const& gMin( ) const { return min(1); }
108  double const& bMin( ) const { return min(2); }
109  double const& rgbMax(size_t i) const { return max(i); }
110  double const& rMax( ) const { return max(0); }
111  double const& gMax( ) const { return max(1); }
112  double const& bMax( ) const { return max(2); }
113  double const& rgb(size_t i) const { return val(i); }
114  double const& r( ) const { return rgb(0); }
115  double const& g( ) const { return rgb(1); }
116  double const& b( ) const { return rgb(2); }
117  double const& rgb(size_t i, double c) { return val(i, c); }
118  double const& r( double c) { return rgb(0, c); }
119  double const& g( double c) { return rgb(1, c); }
120  double const& b( double c) { return rgb(2, c); }
121  double& rgbGet(size_t i) { return valGet(i); }
122  double& rGet( ) { return rgbGet(0); }
123  double& gGet( ) { return rgbGet(1); }
124  double& bGet( ) { return rgbGet(2); }
126  copyFrom(b);
127  return *this;
128  }
130  return RGBf_Space(val_ + b.val_);
131  }
133  return RGBf_Space(val_ - b.val_);
134  }
135  RGBf_Space operator*(double const& c) const {
136  return RGBf_Space(val_ * c);
137  }
138  RGBf_Space operator/(double const& c) const {
139  return RGBf_Space(val_ / c);
140  }
141  double operator*(RGBf_Space const& b) const {
142  return val_ * b.val_;
143  }
144 };
145 
149 inline void colorTransformate(RGBf_Space const& in, RGBf_Space* out) {
150  *out = in;
151 }
152 
156 inline void colorTransformate(RGBi_Space const& in, RGBi_Space* out) {
157  *out = in;
158 }
159 
163 inline void colorTransformate(RGBi_Space const& a, RGBf_Space* b) {
164  for (size_t i = 0; i < 3; ++i) {
165  b->rgb(i, ratioMapping<double>(a.rgbMin(i), a.rgbMax(i), a.rgb(i),
166  b->rgbMin(i), b->rgbMax(i)));
167  }
168 }
169 
173 inline void colorTransformate(RGBf_Space const& a, RGBi_Space* b) {
174  for (size_t i = 0; i < 3; ++i) {
175  b->rgb(i, ratioMapping<double>(a.rgbMin(i), a.rgbMax(i), a.rgb(i),
176  b->rgbMin(i), b->rgbMax(i)));
177  }
178 }
179 
180 } // meow
181 
182 #endif // colors_RGB_Space_H__
int const & r(int c)
Definition: RGB_Space.h:51
double const & rMin() const
Definition: RGB_Space.h:106
int const & gMax() const
Definition: RGB_Space.h:44
double const & r(double c)
Definition: RGB_Space.h:118
double const & rgb(size_t i, double c)
Definition: RGB_Space.h:117
RGBi_Space(RGBi_Space const &b)
Definition: RGB_Space.h:34
int const & g() const
Definition: RGB_Space.h:48
double & rGet()
Definition: RGB_Space.h:122
int const & rMax() const
Definition: RGB_Space.h:43
int const & rgb(size_t i) const
Definition: RGB_Space.h:46
RGBf_Space(double c)
Definition: RGB_Space.h:92
以浮點數Red, Green, Blue 三個值所組成的色彩空間
Definition: RGB_Space.h:86
int const & bMax() const
Definition: RGB_Space.h:45
int const & g(int c)
Definition: RGB_Space.h:52
double const & rgbMin(size_t i) const
Definition: RGB_Space.h:105
RGBi_Space operator-(RGBi_Space const &b) const
Definition: RGB_Space.h:65
intconst & min(size_t id) const
Return the minimum of the i -th channel.
Definition: Color3_Space.h:99
RGBf_Space(Vector3D< double > const &v)
Definition: RGB_Space.h:96
int const & gMin() const
Definition: RGB_Space.h:40
double & rgbGet(size_t i)
Definition: RGB_Space.h:121
int & valGet(size_t id)
Get the non-constant reference of value of the i -th channel.
Definition: Color3_Space.h:139
double const & rgb(size_t i) const
Definition: RGB_Space.h:113
int const & b(int c)
Definition: RGB_Space.h:53
RGBi_Space & operator=(RGBi_Space const &b)
Definition: RGB_Space.h:58
int & gGet()
Definition: RGB_Space.h:56
void colorTransformate(HSLf_Space const &in, HSLf_Space *out)
HSLf_Space to HSLf_Space
Definition: HSL_Space.h:85
int const & bMin() const
Definition: RGB_Space.h:41
int & rGet()
Definition: RGB_Space.h:55
double const & r() const
Definition: RGB_Space.h:114
intconst & max(size_t id) const
Return the maximum of the i -th channel.
Definition: Color3_Space.h:107
int const & rgbMin(size_t i) const
Definition: RGB_Space.h:38
int const & rMin() const
Definition: RGB_Space.h:39
RGBi_Space operator+(RGBi_Space const &b) const
Definition: RGB_Space.h:62
RGBi_Space(int c)
Definition: RGB_Space.h:25
RGBi_Space operator*(int c) const
Definition: RGB_Space.h:68
Base class of color space with 3 channels.
Definition: Color3_Space.h:18
int & rgbGet(size_t i)
Definition: RGB_Space.h:54
3D's vector
Definition: Vectors.h:258
int & bGet()
Definition: RGB_Space.h:57
double const & gMin() const
Definition: RGB_Space.h:107
int operator*(RGBi_Space const &b) const
Definition: RGB_Space.h:74
double operator*(RGBf_Space const &b) const
Definition: RGB_Space.h:141
以整數 Red, Green, Blue 三個值所組成的色彩空間
Definition: RGB_Space.h:19
RGBf_Space operator-(RGBf_Space const &b) const
Definition: RGB_Space.h:132
double & gGet()
Definition: RGB_Space.h:123
double const & bMax() const
Definition: RGB_Space.h:112
double const & rMax() const
Definition: RGB_Space.h:110
double const & b(double c)
Definition: RGB_Space.h:120
RGBf_Space(RGBf_Space const &b)
Definition: RGB_Space.h:101
RGBf_Space operator*(double const &c) const
Definition: RGB_Space.h:135
int const & rgbMax(size_t i) const
Definition: RGB_Space.h:42
double & bGet()
Definition: RGB_Space.h:124
RGBi_Space operator/(int c) const
Definition: RGB_Space.h:71
RGBf_Space operator+(RGBf_Space const &b) const
Definition: RGB_Space.h:129
double const & rgbMax(size_t i) const
Definition: RGB_Space.h:109
double const & gMax() const
Definition: RGB_Space.h:111
double const & b() const
Definition: RGB_Space.h:116
int const & rgb(size_t i, int c)
Definition: RGB_Space.h:50
double const & g() const
Definition: RGB_Space.h:115
double const & bMin() const
Definition: RGB_Space.h:108
int const & b() const
Definition: RGB_Space.h:49
Color3_Space< int > & copyFrom(Color3_Space< int > const &b)
Copy method.
Definition: Color3_Space.h:54
double const & g(double c)
Definition: RGB_Space.h:119
RGBf_Space & operator=(RGBf_Space const &b)
Definition: RGB_Space.h:125
int const & r() const
Definition: RGB_Space.h:47
RGBf_Space operator/(double const &c) const
Definition: RGB_Space.h:138
intconst & val(size_t id) const
Return the value of the i -th channel.
Definition: Color3_Space.h:117
Vector3D< int > val_
Definition: Color3_Space.h:22
RGBi_Space(Vector3D< int > const &v)
Definition: RGB_Space.h:29