1 // This is core/vil/vil_rgba.h 2 #ifndef vil_rgba_h_ 3 #define vil_rgba_h_ 4 //: 5 // \file 6 // \brief Templated four-value colour cell 7 // \author Philip C. Pritchett, Robotics Research Group, University of Oxford 8 // \date 12 Nov 99 9 10 //: This is the appropriate pixel type for RGBA colour images. 11 // The purpose of rgba<T> is to provide an object which consists of four Ts arranged 12 // in order and which can be referred to as 'R', 'G', 'B' and 'A'. Thus, if win32 13 // does something funny when blitting an rgba bitmap to screen, that's up to the 14 // renderer to sort out. 15 // 16 // Currently also includes the following `utilities': 17 // -# conversion to ubyte (luminance of vil_rgba: weights (0.299, 0.587, 0.114, 0)). 18 // -# min and max of vil_rgba<byte> values, useful for morphological operations. 19 // -# arithmetic operations 20 21 #ifdef _MSC_VER 22 # include <vcl_msvc_warnings.h> 23 #endif 24 25 template <class T> 26 struct vil_rgba 27 { 28 public: 29 typedef T value_type; 30 31 // The values. 32 T r; T g; T b; T a; Rvil_rgba33 inline T R() const { return r; } Gvil_rgba34 inline T G() const { return g; } Bvil_rgba35 inline T B() const { return b; } Avil_rgba36 inline T A() const { return a; } 37 38 vil_rgba() = default; 39 40 //: Create grey (v,v,v,1) vil_rgba cell from value v. 41 // This provides a conversion from T to vil_rgba<T>, needed by e.g. two constructors in IUE_filter.h. vil_rgbavil_rgba42 vil_rgba(T v): 43 r(v), g(v), b(v), a(1) {} 44 45 //: Construct from four values. 46 vil_rgba(T red, T green, T blue, T alpha = 1): rvil_rgba47 r(red), g(green), b(blue), a(alpha) {} 48 49 //: equality 50 inline bool operator==(vil_rgba<T> const& o) const 51 { 52 return r==o.r && g==o.g && b==o.b && a==o.a; 53 } 54 55 template <class S> vil_rgbavil_rgba56 vil_rgba(const vil_rgba<S>& that) { 57 r=((T)that.r); 58 g=((T)that.g); 59 b=((T)that.b); 60 a=((T)that.a); 61 } 62 63 template <class S> 64 vil_rgba<T>& operator=(const vil_rgba<S>& that) { 65 r=((T)that.r); 66 g=((T)that.g); 67 b=((T)that.b); 68 a=((T)that.a); 69 return *this; 70 } 71 72 //: Convert vil_rgba to gray using standard (.299, .587, .114) RGB weighting. greyvil_rgba73 T grey() const { return T(0.5+r*0.299+0.587*g+0.114*b); } 74 75 #if 0 // deprecated -- use .grey() instead 76 operator T() const { return T(0.5+r*0.299+0.587*g+0.114*b); } 77 #endif 78 }; 79 80 #define VIL_RGBA_INSTANTIATE \ 81 extern "please include vil/vil_rgba.hxx instead" 82 83 #endif // vil_rgba_h_ 84