00001
00036 #ifndef INC_SPATMOD_IMAGEPIXEL_H
00037 #define INC_SPATMOD_IMAGEPIXEL_H
00038
00039 #ifndef INC_SPATMOD_DATATYPE_H
00040 #include <spatmod/datatype.h>
00041 #endif
00042
00043 namespace SPATMOD {
00044 namespace IMAGE {
00045
00046 class SAMPLE;
00047
00048
00049
00052 class PIXEL {
00053 public:
00054
00055 enum TYPE {
00056 TYPE_Invalid = 0x0000,
00057 TYPE_Single = 0x0101,
00058 TYPE_Multiple = 0x0200,
00059 TYPE_Grayscale = 0x0301,
00060 TYPE_GrayscaleAlpha = 0x8302,
00061 TYPE_Indexed = 0x0401,
00062 TYPE_RGB = 0x0503,
00063 TYPE_RGBA = 0x8504,
00064 TYPE_CMY = 0x0603,
00065 TYPE_CMYA = 0x8604,
00066 TYPE_CMYK = 0x0704,
00067 TYPE_CMYKA = 0x8705,
00068 TYPE_ComplexMP = 0x0802,
00069 TYPE_ComplexRI = 0x0902,
00070 TYPE_IHS = 0x0A03,
00071 TYPE_IHSA = 0x8A04,
00072 TYPE_BHS = 0x0B03,
00073 TYPE_BHSA = 0x8B04,
00074 TYPE_HSV = 0x0C03,
00075 TYPE_HSVA = 0x8C04,
00076 TYPE_Opacity = 0x8001,
00077 TYPE_MASK_NumSamples = 0x00FF,
00078 TYPE_MASK_Alpha = 0x8000
00079 };
00080
00082 PIXEL ();
00083
00085 PIXEL (
00086 TYPE PixelType,
00087 DATATYPE DataType,
00088 UINT16 NumSamples = 0
00089 );
00090
00093 PIXEL (
00094 UINT16 NumSamples,
00095 const SAMPLE *samples,
00096 TYPE PixelType = TYPE_Invalid
00097 );
00098
00100 PIXEL (
00101 const PIXEL& rhs
00102 );
00103
00105 ~PIXEL ();
00106
00108 PIXEL& operator= (
00109 const PIXEL& rhs
00110 );
00111
00113 void Exchange (
00114 PIXEL& other
00115 );
00116
00119 DATATYPE GetDataType (
00120 ) const;
00121
00123 UINT32 GetNumBytes (
00124 ) const;
00125
00127 UINT16 GetNumSamples (
00128 ) const { return (m_NumSamples); }
00129
00131 TYPE GetPixelType (
00132 ) const { return (m_PixelType); }
00133
00135 const SAMPLE& GetSample (
00136 UINT16 index
00137 ) const;
00138
00140 SAMPLE& GetSample (
00141 UINT16 index
00142 );
00143
00145 const SAMPLE* GetSamples (
00146 ) const { return (m_Samples); }
00147
00149 SAMPLE* GetSamples (
00150 ) { return (m_Samples); }
00151
00153 bool HasAlpha (
00154 ) const { return ((m_PixelType & TYPE_MASK_Alpha) != 0); }
00155
00157 bool IsEqual (
00158 const PIXEL& rhs
00159 ) const;
00160
00163 bool IsSameType (
00164 const PIXEL& rhs
00165 ) const;
00166
00168 void SetSample (
00169 UINT16 index,
00170 const SAMPLE& Sample
00171 );
00172
00176 ERRVALUE SetType (
00177 TYPE PixelType
00178 );
00179
00181 void SetValueMinimum (
00182 );
00183
00185 void SetValueMaximum (
00186 );
00187
00188 private:
00189 #ifndef GENERATING_DOXYGEN_OUTPUT
00190 SAMPLE *m_Samples;
00191 UINT16 m_NumSamples;
00192 TYPE m_PixelType;
00193
00194 void Copy (const PIXEL& rhs);
00195
00196 #endif // GENERATING_DOXYGEN_OUTPUT
00197 };
00198
00200 inline bool operator== (
00201 const PIXEL& lhs,
00202 const PIXEL& rhs
00203 ) { return (lhs.IsEqual(rhs)); }
00204
00206 inline bool operator!= (
00207 const PIXEL& lhs,
00208 const PIXEL& rhs
00209 ) { return (!lhs.IsEqual(rhs)); }
00210
00211
00212
00213 }
00214 }
00215
00216 #endif // INC_SPATMOD_IMAGEPIXEL_H