Color.hpp

00001 #ifndef __FIBER_FIELD_COLOR_HPP
00002 #define __FIBER_FIELD_COLOR_HPP
00003 
00004 #include "FiberType.hpp"
00005 #include <eagle/ColorSpace.hpp>
00006 
00007 namespace Fiber
00008 {
00009 
00010 inline  unsigned char clamp_int_to_byte(int i)
00011 {
00012         if (i<0)   return 0;
00013         if (i>255) return 255;
00014         return i;
00015 }
00016 
00017 
00018 inline  unsigned char clamp_flt_to_byte(double d)
00019 {
00020         if (d<=0)   return 0;
00021         if (d>=1.0) return 255;
00022         return (int)(d*255);
00023 }
00024 
00025 
00026         typedef Eagle::rgb_t  rgb;
00027         typedef Eagle::rgba_t rgba;
00028 
00029 /*
00030 struct  rgb
00031 {
00032         unsigned char  r,g,b;
00033 
00034 #if 1
00035         rgb()
00036         {}
00037 #else
00038         rgb()
00039         : r(0), g(0), b(0)
00040         {}
00041 #endif
00042 
00043         rgb(unsigned char R, unsigned char G, unsigned char B)
00044         : r(R), g(G), b(B)
00045         {}
00046 
00047         rgb(int R, int G, int B)
00048         : r(clamp_int_to_byte(R)), g(clamp_int_to_byte(G)), b(clamp_int_to_byte(B) )
00049         {}
00050 };
00051 */
00052 
00053 
00054  /*
00055 struct  rgba
00056 {
00057         unsigned char  r,g,b, a; 
00058 
00060         rgba()
00061         {}
00062 
00063         rgba(unsigned char R, unsigned char G, unsigned char B, unsigned char A)
00064         : r(R), g(G), b(B), a(A)
00065         {}
00066 
00067 static  unsigned char clamp(int i)
00068         {
00069                 if (i<0)   return 0;
00070                 if (i>255) return 255;
00071                 return i;
00072         }
00073 
00074         rgba(int R, int G, int B, int A)
00075         : r(clamp_int_to_byte(R)), g(clamp_int_to_byte(G)), b(clamp_int_to_byte(B)), a(clamp_int_to_byte(A) )
00076         {}
00077 
00078 };
00079  */
00080 
00081 struct  bgr
00082 {
00083         unsigned        b,g,r; 
00084 };
00085 
00086 
00087         typedef Eagle::rgb16_t rgb16;
00088         typedef Eagle::rgb_float_t rgb_real;
00089         typedef Eagle::rgba_float_t rgba_real;
00090 
00091 
00092 /*
00093 struct  rgb16
00094 {
00095         unsigned short  r,g,b; 
00096 };
00097 
00098 struct  rgb_real
00099 {
00100         float  r,g,b; 
00101 
00102         rgb_real(double R, double G, double B)
00103         : r(R), g(G), b(B)
00104         {}
00105 
00106 static  inline unsigned char clamp(double d)
00107         {
00108                 if (d<0) return 0; 
00109                 if (d>255) return 255; 
00110                 return (unsigned char)d;
00111         }
00112 
00113         operator rgb() const
00114         {
00115                 return rgb( clamp(r), clamp(g), clamp(b) );
00116         }
00117 };
00118 
00119 struct  rgba_real
00120 {
00121         float  r,g,b,a; 
00122 };
00123 
00124 */
00125 
00126 inline rgb_real operator*(const rgb&c, double d)
00127 {
00128         return rgb_real(c[0]*d, c[1]*d, c[2]*d);
00129 }
00130 
00131 inline rgb_real operator*(const rgb_real&l, const rgb_real&r)
00132 {
00133         return rgb_real(l[0]*r[0], l[1]*r[1], l[2]*r[2]);
00134 }
00135 
00136 
00137 /*
00138 inline rgb_real operator+(const rgb_real&l, const rgb_real&r)
00139 {
00140         return rgb_real(l[0]+r[0], l.g+r.g, l.b+r.b);
00141 }
00142 
00143 inline rgb_real operator-(const rgb_real&l, const rgb_real&r)
00144 {
00145         return rgb_real(l.r-r.r, l.g-r.g, l.b-r.b);
00146 }
00147 */
00148 
00149 } // namespace Fiber
00150 
00151 namespace Eagle
00152 {
00153 
00154 
00155 } // Eagle
00156 
00157 
00158 #endif // __FIBER_FIELD_COLOR_HPP