00001 /*========================================================================= 00002 00003 Program: Insight Segmentation & Registration Toolkit 00004 Module: $RCSfile: itkRGBAPixel.h,v $ 00005 Language: C++ 00006 Date: $Date: 2002/09/11 19:57:13 $ 00007 Version: $Revision: 1.9 $ 00008 00009 Copyright (c) 2002 Insight Consortium. All rights reserved. 00010 See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. 00011 00012 This software is distributed WITHOUT ANY WARRANTY; without even 00013 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00014 PURPOSE. See the above copyright notices for more information. 00015 00016 =========================================================================*/ 00017 #ifndef __itkRGBAPixel_h 00018 #define __itkRGBAPixel_h 00019 00020 // Undefine an eventual RGBAPixel macro 00021 #ifdef RGBAPixel 00022 #undef RGBAPixel 00023 #endif 00024 00025 #include <itkIndent.h> 00026 #include <itkFixedArray.h> 00027 #include "vnl/vnl_math.h" 00028 00029 namespace itk 00030 { 00031 00051 template < typename TComponent = unsigned short > 00052 class RGBAPixel: public FixedArray<TComponent,4> 00053 { 00054 public: 00056 typedef RGBAPixel Self; 00057 typedef FixedArray<TComponent, 4> Super; 00058 00060 typedef FixedArray<TComponent, 4> BaseArray; 00061 00063 typedef TComponent ComponentType; 00064 00066 RGBAPixel() {Fill(0);} 00067 RGBAPixel (const ComponentType& r); 00068 00070 RGBAPixel(const Self& r): BaseArray(r) {} 00071 RGBAPixel(const ComponentType r[4]): BaseArray(r) {} 00072 00074 RGBAPixel& operator= (const Self& r); 00075 RGBAPixel& operator= (const ComponentType r[4]); 00076 00078 static int GetNumberOfComponents(){ return 4;} 00079 00081 ComponentType GetNthComponent(int c) const 00082 { return this->operator[](c); } 00083 00085 ComponentType GetScalarValue() const 00086 { 00087 return static_cast<ComponentType> (vnl_math_sqrt( 00088 static_cast<double>(this->operator[](0)) * static_cast<double>(this->operator[](0)) + 00089 static_cast<double>(this->operator[](1)) * static_cast<double>(this->operator[](1)) + 00090 static_cast<double>(this->operator[](2)) * static_cast<double>(this->operator[](2)))); 00091 } 00092 00094 void SetNthComponent(int c, const ComponentType& v) 00095 { this->operator[](c) = v; } 00096 00098 void SetRed( ComponentType red ) { this->operator[](0) = red;} 00099 00101 void SetGreen( ComponentType green ) {this->operator[](1) = green;} 00102 00104 void SetBlue( ComponentType blue ) {this->operator[](2) = blue;} 00105 00107 void SetAlpha( ComponentType alpha ) {this->operator[](3) = alpha;} 00108 00110 void Set( ComponentType red, ComponentType green, ComponentType blue, ComponentType alpha ) 00111 { this->operator[](0) = red; this->operator[](1) = green; this->operator[](2) = blue; this->operator[](3) = alpha;} 00112 00114 const ComponentType & GetRed( void ) const { return this->operator[](0);} 00115 00117 const ComponentType & GetGreen( void ) const { return this->operator[](1);} 00118 00120 const ComponentType & GetBlue( void ) const { return this->operator[](2);} 00121 00123 const ComponentType & GetAlpha( void ) const { return this->operator[](3);} 00124 }; 00125 00126 00127 template< typename TComponent > 00128 ITK_EXPORT std::ostream& operator<<(std::ostream& os, 00129 const RGBAPixel<TComponent> & c); 00130 00131 template< typename TComponent > 00132 ITK_EXPORT std::istream& operator>>(std::istream& is, 00133 RGBAPixel<TComponent> & c); 00134 00135 } // end namespace itk 00136 00137 #ifndef ITK_MANUAL_INSTANTIATION 00138 #include "itkRGBAPixel.txx" 00139 #endif 00140 00141 #endif