00001
00002 #ifndef vil1_rgba_h_
00003 #define vil1_rgba_h_
00004 #ifdef VCL_NEEDS_PRAGMA_INTERFACE
00005 #pragma interface
00006 #endif
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <vcl_compiler.h>
00025
00026 template <class T>
00027 struct vil1_rgba
00028 {
00029 public:
00030 typedef T value_type;
00031
00032
00033 T r; T g; T b; T a;
00034 inline T R() const { return r; }
00035 inline T G() const { return g; }
00036 inline T B() const { return b; }
00037 inline T A() const { return a; }
00038
00039 vil1_rgba() {}
00040
00041
00042
00043 vil1_rgba(T v):
00044 r(v), g(v), b(v), a(1) {}
00045
00046
00047 vil1_rgba(T red, T green, T blue, T alpha = 1):
00048 r(red), g(green), b(blue), a(alpha) {}
00049
00050
00051 #if VCL_HAS_MEMBER_TEMPLATES
00052 template <class S>
00053 vil1_rgba(const vil1_rgba<S>& that) {
00054 r=((T)that.r);
00055 g=((T)that.g);
00056 b=((T)that.b);
00057 a=((T)that.a);
00058 }
00059
00060 template <class S>
00061 vil1_rgba<T>& operator=(const vil1_rgba<S>& that) {
00062 r=((T)that.r);
00063 g=((T)that.g);
00064 b=((T)that.b);
00065 a=((T)that.a);
00066 return *this;
00067 }
00068 #else
00069
00070 inline vil1_rgba(const vil1_rgba<double>& that)
00071 {
00072 r=((T)that.r);
00073 g=((T)that.g);
00074 b=((T)that.b);
00075 a=((T)that.a);
00076 }
00077 inline vil1_rgba(const vil1_rgba<unsigned char>& that)
00078 {
00079 r=((T)that.r);
00080 g=((T)that.g);
00081 b=((T)that.b);
00082 a=((T)that.a);
00083 }
00084
00085 inline vil1_rgba<T>& operator=(const vil1_rgba<double>& that)
00086 {
00087 r=((T)that.r);
00088 g=((T)that.g);
00089 b=((T)that.b);
00090 a=((T)that.a);
00091 return *this;
00092 }
00093
00094 inline vil1_rgba<T>& operator=(const vil1_rgba<float>& that)
00095 {
00096 r=((T)that.r);
00097 g=((T)that.g);
00098 b=((T)that.b);
00099 a=((T)that.a);
00100 return *this;
00101 }
00102
00103 inline vil1_rgba<T>& operator=(const vil1_rgba<unsigned char>& that)
00104 {
00105 r=((T)that.r);
00106 g=((T)that.g);
00107 b=((T)that.b);
00108 a=((T)that.a);
00109 return *this;
00110 }
00111 #endif
00112
00113
00114 T grey() const { return T(0.5+r*0.299+0.587*g+0.114*b); }
00115
00116
00117 operator T() const { return T(0.5+r*0.299+0.587*g+0.114*b); }
00118 };
00119
00120 #define VIL1_RGBA_INSTANTIATE \
00121 extern "please include vil1/vil1_rgba.txx instead"
00122
00123 #endif // vil1_rgba_h_