00001 #ifndef RGBCOLOR_H_ 00002 #define RGBCOLOR_H_ 00003 00004 #include <iostream> 00005 00006 namespace rcrt 00007 { 00008 00009 class RGBColor 00010 { 00011 private: 00012 float values[3]; 00013 void assign(const RGBColor& col); 00014 00015 public: 00016 RGBColor(float c=0); 00017 RGBColor(float r, float g, float b); 00018 RGBColor(const RGBColor& col); 00019 virtual ~RGBColor(); 00020 00021 const RGBColor& operator= (const RGBColor& col); 00022 00023 RGBColor operator+ (const RGBColor& col) const; 00024 RGBColor operator- (const RGBColor& col) const; 00025 RGBColor operator* (float f) const; 00026 RGBColor operator* (const RGBColor& col) const; 00027 RGBColor operator/ (float f) const; 00028 bool operator== (const RGBColor& col) const; 00029 00030 float r() const; 00031 float g() const; 00032 float b() const; 00033 float avg() const; 00034 float sum() const; 00035 RGBColor clamped() const; 00036 const float& max() const; 00037 00038 static const RGBColor BLACK; 00039 static const RGBColor WHITE; 00040 static const RGBColor RED; 00041 static const RGBColor GREEN; 00042 static const RGBColor BLUE; 00043 }; 00044 00045 inline std::ostream& operator<<(std::ostream& o, const RGBColor& c) 00046 { 00047 o << "RGB(" << c.r() << "," << c.g() << "," << c.b() << ")"; 00048 return o; 00049 } 00050 00051 inline RGBColor operator-(const float& f, const RGBColor& c) 00052 { 00053 return RGBColor(f-c.r(),f-c.g(),f-c.b()); 00054 } 00055 00056 } 00057 00058 #endif /*RGBCOLOR_H_*/