00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __itkLabelToRGBFunctor_h
00019 #define __itkLabelToRGBFunctor_h
00020
00021 namespace itk
00022 {
00023
00024 namespace Functor {
00025
00040 template< class TLabel, class TRGBPixel >
00041 class LabelToRGBFunctor
00042 {
00043 public:
00044
00045 typedef LabelToRGBFunctor Self;
00046
00047 LabelToRGBFunctor()
00048 {
00049
00050 TRGBPixel rgbPixel;
00051 typedef typename TRGBPixel::ValueType ValueType;
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 AddColor( 255, 0, 0 );
00066 AddColor( 0, 205, 0 );
00067 AddColor( 0, 0, 255 );
00068 AddColor( 0, 255, 255 );
00069 AddColor( 255, 0, 255 );
00070 AddColor( 255, 127, 0 );
00071 AddColor( 0, 100, 0 );
00072 AddColor( 138, 43, 226 );
00073 AddColor( 139, 35, 35 );
00074 AddColor( 0, 0, 128 );
00075 AddColor( 139, 139, 0 );
00076 AddColor( 255, 62, 150 );
00077 AddColor( 139, 76, 57 );
00078 AddColor( 0, 134, 139 );
00079 AddColor( 205, 104, 57 );
00080 AddColor( 191, 62, 255 );
00081 AddColor( 0, 139, 69 );
00082 AddColor( 199, 21, 133 );
00083 AddColor( 205, 55, 0 );
00084 AddColor( 32, 178, 170 );
00085 AddColor( 106, 90, 205 );
00086 AddColor( 255, 20, 147 );
00087 AddColor( 69, 139, 116 );
00088 AddColor( 72, 118, 255 );
00089 AddColor( 205, 79, 57 );
00090 AddColor( 0, 0, 205 );
00091 AddColor( 139, 34, 82 );
00092 AddColor( 139, 0, 139 );
00093 AddColor( 238, 130, 238 );
00094 AddColor( 139, 0, 0 );
00095
00096
00097
00098 m_BackgroundColor.Fill( NumericTraits<ValueType>::Zero );
00099 m_BackgroundValue = NumericTraits<TLabel>::Zero;
00100 }
00101
00102 inline TRGBPixel operator()( const TLabel & p) const
00103 {
00104
00105
00106 if( p == m_BackgroundValue )
00107 {
00108 return m_BackgroundColor;
00109 }
00110
00111
00112 return m_Colors[ p % m_Colors.size()];
00113 }
00114
00115 void AddColor(unsigned char r, unsigned char g, unsigned char b)
00116 {
00117 TRGBPixel rgbPixel;
00118 typedef typename TRGBPixel::ValueType ValueType;
00119
00120 ValueType m = NumericTraits< ValueType >::max();
00121
00122 rgbPixel.Set( static_cast< ValueType >( static_cast< double >( r ) / 255 * m ),
00123 static_cast< ValueType >( static_cast< double >( g ) / 255 * m ),
00124 static_cast< ValueType >( static_cast< double >( b ) / 255 * m ) );
00125 m_Colors.push_back( rgbPixel );
00126 }
00127
00128
00129 void ResetColors()
00130 {
00131 m_Colors.clear();
00132 }
00133
00134
00135 unsigned int GetNumberOfColors() const
00136 {
00137 return m_Colors.size();
00138 }
00139
00140 bool operator != (const Self &l) const
00141 {
00142 const bool areDifferent = m_BackgroundColor != l.m_BackgroundColor ||
00143 m_BackgroundValue != l.m_BackgroundValue;
00144 return areDifferent;
00145 }
00146
00147 bool operator==( const Self & other ) const
00148 {
00149 return !(*this != other);
00150 }
00151
00152 void SetBackgroundValue( TLabel v )
00153 {
00154 m_BackgroundValue = v;
00155 }
00156
00157 void SetBackgroundColor( TRGBPixel rgb )
00158 {
00159 m_BackgroundColor = rgb;
00160 }
00161
00162 ~LabelToRGBFunctor() {}
00163
00164 std::vector< TRGBPixel > m_Colors;
00165
00166 TRGBPixel m_BackgroundColor;
00167
00168 TLabel m_BackgroundValue;
00169
00170 };
00171 }
00172
00173 }
00174
00175 #endif
00176