Page principale | Hiérarchie des classes | Liste des classes | Liste des fichiers | Membres de classe | Membres de fichier

Color.hpp

Aller à la documentation de ce fichier.
00001 /// \file 00002 /// Définition des classes utiles pour la gestion des couleurs 00003 #ifndef GUARD_COLOR_h 00004 #define GUARD_COLOR_h 00005 00006 #include <string> 00007 #include <sstream> 00008 #include <cmath> 00009 #include <stdexcept> 00010 #include "Debug.hpp" 00011 00012 static Channel channelColor(&cout); 00013 /// Une constante bien connue... 00014 const double Pi = 3.141592; 00015 /////////////////////////////////////////////////////////////////////////////// 00016 /// Type de couleur 00017 /// 00018 /// 3 type de couleurs : vide pour des besoins d'implémenation, gris et couleur 00019 /////////////////////////////////////////////////////////////////////////////// 00020 enum ECOLOR_TYPE{ 00021 COLOR_EMPTY, 00022 COLOR_GRAY, 00023 COLOR_COLOR, 00024 }; 00025 class Color_Base; 00026 /////////////////////////////////////////////////////////////////////////////// 00027 /// Interface sur une classe de couleur concrète 00028 /// 00029 /// Gère un compteur de références 00030 /// La pluspart des méthodes sont redirigées vers une instance héritées de 00031 /// Color_Base 00032 /////////////////////////////////////////////////////////////////////////////// 00033 class Color{ 00034 /// Pointeur sur une couleur 00035 Color_Base* p; 00036 public: 00037 /// Constructeur par défaut, couleur de type : COLOR_EMPTY 00038 Color(); 00039 /// Constructeur pour une couleur de type : COLOR_GRAY 00040 Color(float); 00041 /// Constructeur pour une couleur de type : COLOR_COLOR 00042 Color(float, float, float, bool); 00043 /// Constructeur de copie 00044 Color(const Color&); 00045 /// Opérateur d'affectation 00046 Color& operator=(const Color&); 00047 /// Desctructeur 00048 ~Color(); 00049 /// Retourne le type de la couleur 00050 ECOLOR_TYPE getType()const; 00051 /// Retourne une chaîne de caractères détaillée 00052 string toString() const; 00053 /// Retourne le niveau de gris [0:1] 00054 float getGray() const; 00055 /// Retourne la composante rouge [0:1] 00056 float getRed() const; 00057 /// Retourne la composante verte [0:1] 00058 float getGreen() const; 00059 /// Retourne la composante bleue [0:1] 00060 float getBlue() const; 00061 /// Retourne la teinte [0:1] 00062 float getHue()const; 00063 /// Retourne la saturation [0:1] 00064 float getSaturation()const; 00065 /// Retourne la valeur [0:1] 00066 float getValue()const; 00067 /// Retourne un table des composantes 00068 float* getFloat(bool)const; 00069 /// Retourne la distance d'une couleur à une autre 00070 float distance(Color)const; 00071 /// Opérateur relationnel d'égalité 00072 bool operator==(const Color)const; 00073 /// Opérateur relationnel d'ordre 00074 bool operator<(const Color)const; 00075 /// Retourne une couleur prédéfinie 00076 static Color getColor(int); 00077 /// Retourne la moyenne pondérée de 2 couleurs 00078 /// \param Color première couleur 00079 /// \param int poids de la première couleur 00080 /// \param Color seconde couleur 00081 /// \param vint poids de la seconde couleur 00082 static Color getAverageColor(Color, int, Color, int); 00083 /// Teste l'appartenance à une sphère de couleur 00084 /// \param float* valeur hsv du centre 00085 /// \param float rayon de la sphère 00086 /// \param float* valeur hsv de couleur à tester 00087 static bool inWindow(float*, float, float*); 00088 }; 00089 /////////////////////////////////////////////////////////////////////////////// 00090 /// Classe de base abstraite pour les 2 type de couleurs : gris et couleurs 00091 /// 00092 /// C'est cette classe qui possède le compteur de référence 00093 /////////////////////////////////////////////////////////////////////////////// 00094 class Color_Base{ 00095 friend class Color; 00096 /// Compteur de références 00097 int use; 00098 protected: 00099 /// Type 00100 ECOLOR_TYPE type; 00101 /// Construit une couleur avec son type et initialise le compteur de références 00102 Color_Base(ECOLOR_TYPE _type):use(1), type(_type){} 00103 /// Retourne une chaîne de caractères détaillés pour le debug 00104 virtual string toString() const = 0; 00105 /// Retourne le niveau de gris [0:1] 00106 virtual float getGray()const = 0; 00107 /// Retourne la composante rouge [0:1] 00108 virtual float getRed()const = 0; 00109 /// Retourne la composante verte [0:1] 00110 virtual float getGreen()const = 0; 00111 /// Retourne la composante bleue [0:1] 00112 virtual float getBlue()const = 0; 00113 /// Retourne la teinte [0:1] 00114 virtual float getHue()const = 0; 00115 /// Retourne la saturation [0:1] 00116 virtual float getSaturation()const = 0; 00117 /// Retourne la valeur [0:1] 00118 virtual float getValue()const = 0; 00119 /// Retourne la distance entre 2 couleurs 00120 virtual float distance(const Color_Base*)const = 0; 00121 /// Opérateur relationnel d'égalité de couleur 00122 virtual bool operator==(const Color) const = 0; 00123 /// Opérateur relationnel d'ordre sur les couleurs 00124 virtual bool operator<(const Color) const = 0; 00125 public: 00126 /// Retourne le type de la couleur 00127 ECOLOR_TYPE getType()const{return type;} 00128 }; 00129 /////////////////////////////////////////////////////////////////////////////// 00130 /// Classe pour les couleurs en niveaux de gris 00131 /////////////////////////////////////////////////////////////////////////////// 00132 class Color_Gray : public Color_Base{ 00133 friend class Color; 00134 /// Niveau de gris 00135 float gray; 00136 /// Construit une couleur à partir d'un niveau de gris [0:255.0] 00137 Color_Gray(float _gray):Color_Base(COLOR_GRAY), gray(_gray){} 00138 /// Retourne une chaîne de caractères détaillée 00139 string toString() const; 00140 /// Retourne le niveau de gris [0:255] 00141 float getGray()const{return gray;} 00142 /// Retourne la composante rouge = niveau de gris [0:255] 00143 float getRed()const{return gray;} 00144 /// Retourne la composante verte = niveau de gris [0:255] 00145 float getGreen()const{return gray;} 00146 /// Retourne la composante bleue = niveau de gris [0:255] 00147 float getBlue()const{return gray;} 00148 /// Retourne la teinte = 0 [0:1] 00149 float getHue()const{return 0;} 00150 /// Retourne la saturation teinte = 0 [0:1] 00151 float getSaturation()const{return 0;} 00152 /// Retourne la valeur = niveau de gris [0:1] 00153 float getValue()const{return gray / 255.0;} 00154 /// Retourn la distance entre 2 niveaux de gris : valeur absoule de la différence 00155 float distance(const Color_Base*)const; 00156 /// Oérateur relationnel d'égalité 00157 bool operator==(const Color) const; 00158 /// opérateur relationnel d'ordre 00159 bool operator<(const Color) const; 00160 }; 00161 /////////////////////////////////////////////////////////////////////////////// 00162 /// Classe pour les couleurs 00163 /////////////////////////////////////////////////////////////////////////////// 00164 class Color_Color : public Color_Base{ 00165 friend class Color; 00166 /// Composante rouge 00167 float red; 00168 /// Composante verte 00169 float green; 00170 /// Composante bleue 00171 float blue; 00172 /// Teinte 00173 float hue; 00174 /// Saturation 00175 float saturation; 00176 /// Valeur 00177 float value; 00178 /// Fonction de conversion RGB->HSV 00179 void _computeHSV(); 00180 /// Fonction de conversion HSV->RGB 00181 void _computeRGB(); 00182 /// Construit une couleur à partir de 3 valeurs RGB ou 3 valeus HSV (dépend du paramètre booléen) 00183 Color_Color(float, float, float, bool); 00184 /// Retourne une chaîne de caractères détaillés pour le debug 00185 string toString() const; 00186 /// Retourne le niveau de gris [0:1] : on fait simplement la moyenne des 3 valeurs 00187 float getGray()const{ return (red + green + blue) / 3;} 00188 /// Retourne la composante rouge [0:1] 00189 float getRed()const{return red;} 00190 /// Retourne la composante verte [0:1] 00191 float getGreen()const{return green;} 00192 /// Retourne la composante bleue [0:1] 00193 float getBlue()const{return blue;} 00194 /// Retourne la teinte 00195 float getHue()const{return hue;} 00196 /// Retourne la saturation 00197 float getSaturation()const{return saturation;} 00198 /// Retourne la valeur 00199 float getValue()const{return value;} 00200 /// Distance entre 2 couleurs 00201 float distance(const Color_Base*)const; 00202 /// Opérateur relationnel d'égalité 00203 bool operator==(const Color) const; 00204 /// Opérateur relationnel d'ordre 00205 bool operator<(const Color)const; 00206 }; 00207 #endif 00208

Généré le Thu Jul 1 23:13:32 2004 pour segment par doxygen 1.3.7