-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcolor.cpp
More file actions
90 lines (80 loc) · 1.66 KB
/
color.cpp
File metadata and controls
90 lines (80 loc) · 1.66 KB
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
84
85
86
87
88
89
90
#include "color.h"
color::color() {
red = 0;
green = 0;
blue = 0;
}
color::color(double r, double g, double b) {
red = r;
green = g;
blue = b;
}
double color::getRed()
{
return red;
}
double color::getGreen()
{
return green;
}
double color::getBlue()
{
return blue;
}
void color::setRed(double x) { red = x; }
void color::setGreen(double x) { green = x; }
void color::setBlue(double x) { blue = x; }
void color::setBlack() {
red = 0;
green = 0;
blue = 0;
}
void color::setWhite() {
red = 1;
green = 1;
blue = 1;
}
color color::multByScalar(double scalar) {
return color(red*scalar, green*scalar, blue*scalar);
}
color color::clip() {
double light = red + green + blue;
double excesslight = light - 3;
if (excesslight > 0) {
red = red + excesslight*(red / light);
green = green + excesslight*(green / light);
blue = blue + excesslight*(blue / light);
}
if (red > 1) { red = 1; }
if (green > 1) { green = 1; }
if (blue > 1) { blue = 1; }
if (red < 0) { red = 0; }
if (green < 0) { green = 0; }
if (blue < 0) { blue = 0; }
return color(red, green, blue);
}
color color::operator* (color c) {
return color(red*c.getRed(), green*c.getGreen(), blue*c.getBlue());
}
color& color::operator*= (color c)
{
red *= c.getRed();
green *= c.getGreen();
blue *= c.getBlue();
return (*this);
}
color color::operator+ (color c)
{
color res;
res.setRed(c.getRed() + red);
res.setGreen(c.getGreen() + green);
res.setBlue(c.getBlue() + blue);
return res;
}
color& color::operator+= (color c)
{
red += c.getRed();
green += c.getGreen();
blue += c.getBlue();
return (*this);
}