INFO702 - TPs
Loading...
Searching...
No Matches
Color.hpp
1#ifndef _COLOR_HPP_
2#define _COLOR_HPP_
3
4/**
5 Représente une couleur avec un codage RGB. Ce codage utilise 3
6 octets, le premier octet code l'intensité du rouge, le deuxième
7 l'intensité du vert, le troisième l'intensité du bleu.
8*/
9struct Color {
10 typedef unsigned char Byte;
11
12 /// Code les 3 canaux RGB sur 3 octets.
13 Byte red, green, blue;
14
15 Color() {}
16 /// Crée la couleur spécifiée par (_red,_green,_blue).
17 Color( Byte _red, Byte _green, Byte _blue )
18 : red( _red ), green( _green ), blue( _blue ) {}
19
20 /// @return l'intensité de rouge (entre 0.0 et 1.0)
21 float r() const { return ( (float) red ) / 255.0; }
22 /// @return l'intensité de vert (entre 0.0 et 1.0)
23 float g() const { return ( (float) green ) / 255.0; }
24 /// @return l'intensité de bleu (entre 0.0 et 1.0)
25 float b() const { return ( (float) blue ) / 255.0; }
26
27 /// Sert à désigner un canal.
28 enum Channel { Red, Green, Blue };
29 /// @return le canal le plus intense.
30 Channel argmax() const
31 {
32 if ( red >= green ) return red >= blue ? Red : Blue;
33 else return green >= blue ? Green : Blue;
34 }
35 /// @return l'intensité maximale des canaux
36 float max() const { return std::max( std::max( r(), g() ), b() ); }
37 /// @return l'intensité minimale des canaux
38 float min() const { return std::min( std::min( r(), g() ), b() ); }
39 /**
40 Convertit la couleur RGB en le modèle HSV (TSV en français).
41 @param h la teinte de la couleur (entre 0 et 359), hue en anglais.
42 @param s la saturation de la couleur (entre 0.0 et 1.0)
43 @param v la valeur ou brillance de la couleur (entre 0.0 et 1.0).
44 */
45 void getHSV( int & h, float & s, float & v ) const
46 {
47 // Taking care of hue
48 if ( max() == min() ) h = 0;
49 else {
50 switch ( argmax() ) {
51 case Red: h = ( (int) ( 60.0 * ( g() - b() ) / ( max() - min() ) + 360.0 ) ) % 360;
52 break;
53 case Green: h = ( (int) ( 60.0 * ( b() - r() ) / ( max() - min() ) + 120.0 ) );
54 break;
55 case Blue: h = ( (int) ( 60.0 * ( r() - g() ) / ( max() - min() ) + 240.0 ) );
56 break;
57 }
58 }
59 // Taking care of saturation
60 s = max() == 0.0 ? 0.0 : 1.0 - min() / max();
61 // Taking care of value
62 v = max();
63 }
64 /**
65 TODO: Convertit la couleur donnée avec le modèle HSV (TSV en
66 français) en une couleur RGB.
67 */
68 void setHSV( int h, float s, float v )
69 {}
70};
71
72#endif //_COLOR_HPP_
Definition Color.hpp:9
float g() const
Definition Color.hpp:23
Color(Byte _red, Byte _green, Byte _blue)
Crée la couleur spécifiée par (_red,_green,_blue).
Definition Color.hpp:17
float b() const
Definition Color.hpp:25
Channel
Sert à désigner un canal.
Definition Color.hpp:28
float max() const
Definition Color.hpp:36
Channel argmax() const
Definition Color.hpp:30
float r() const
Definition Color.hpp:21
void setHSV(int h, float s, float v)
Definition Color.hpp:68
void getHSV(int &h, float &s, float &v) const
Definition Color.hpp:45
float min() const
Definition Color.hpp:38
Byte red
Code les 3 canaux RGB sur 3 octets.
Definition Color.hpp:13