00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
#ifndef __itkRGBPixel_h
00018
#define __itkRGBPixel_h
00019
00020
00021
#ifdef RGBPixel
00022
#undef RGBPixel
00023
#endif
00024
00025
#include <itkIndent.h>
00026
#include <itkFixedArray.h>
00027
#include "vnl/vnl_math.h"
00028
00029
namespace itk
00030 {
00031
00050
template <
typename TComponent =
unsigned short >
00051 class RGBPixel:
public FixedArray<TComponent,3>
00052 {
00053
public:
00055 typedef RGBPixel Self;
00056 typedef FixedArray<TComponent, 3> SuperClass;
00057
00059
itkStaticConstMacro(Dimension,
unsigned int, 3);
00060
00062 typedef FixedArray<TComponent, 3> BaseArray;
00063
00065 typedef TComponent
ComponentType;
00066 typedef typename SuperClass::ValueType
ValueType;
00067
00069 RGBPixel() {
Fill(0);}
00070 RGBPixel (
const ComponentType& r) {
Fill(r); }
00071
00073
RGBPixel(
const Self& r): BaseArray(r) {}
00074 RGBPixel(
const ComponentType r[3]):
BaseArray(r) {}
00075
00077
Self&
operator= (
const Self& r);
00078
Self&
operator= (
const ComponentType r[3]);
00079
00081
Self operator+(
const Self &vec)
const;
00082
Self operator-(
const Self &vec)
const;
00083
const Self &
operator+=(
const Self &vec);
00084
const Self &
operator-=(
const Self &vec);
00085
Self operator*(
const ComponentType &f)
const;
00086
00087
00089
static int GetNumberOfComponents(){
return 3;}
00090
00092 ComponentType
GetNthComponent(
int c)
const
00093 {
return this->
operator[](c); }
00094
00096 ComponentType GetScalarValue()
const
00097
{
00098
return static_cast<ComponentType> (vcl_sqrt(
00099 static_cast<double>(this->operator[](0)) * static_cast<double>(this->operator[](0)) +
00100 static_cast<double>(this->operator[](1)) * static_cast<double>(this->operator[](1)) +
00101 static_cast<double>(this->operator[](2)) * static_cast<double>(this->operator[](2))));
00102 }
00103
00105
void SetNthComponent(
int c,
const ComponentType& v)
00106 { this->
operator[](c) = v; }
00107
00109 void SetRed(
ComponentType red ) { this->
operator[](0) = red;}
00110
00112
void SetGreen( ComponentType green ) {this->
operator[](1) = green;}
00113
00115
void SetBlue(
ComponentType blue ) {this->
operator[](2) = blue;}
00116
00118
void Set(
ComponentType red,
ComponentType green,
ComponentType blue )
00119 { this->
operator[](0) = red; this->
operator[](1) = green; this->
operator[](2) = blue;}
00120
00122 const ComponentType &
GetRed(
void )
const {
return this->
operator[](0);}
00123
00125
const ComponentType &
GetGreen(
void )
const {
return this->
operator[](1);}
00126
00128
const ComponentType &
GetBlue(
void )
const {
return this->
operator[](2);}
00129
00131
ComponentType GetLuminance(
void ) const;
00132 };
00133
00134
00135 template< typename TComponent >
00136 ITK_EXPORT std::ostream& operator<<(std::ostream& os,
00137 const
RGBPixel<TComponent> & c);
00138 template< typename TComponent >
00139 ITK_EXPORT std::istream& operator>>(std::istream& is,
00140
RGBPixel<TComponent> & c);
00141
00142 }
00143
00144 #ifndef ITK_MANUAL_INSTANTIATION
00145 #include "itkRGBPixel.txx"
00146 #endif
00147
00148 #endif