00001
00030 #ifndef INC_SPATMOD_IMAGEFILTERDATATYPE_H
00031 #define INC_SPATMOD_IMAGEFILTERDATATYPE_H
00032
00033 #ifndef INC_SPATMOD_IMAGEFILTER_H
00034 #include <spatmod/imagefilter.h>
00035 #endif
00036
00037 #ifndef INC_SPATMOD_IMAGEBUFFER_H
00038 #include <spatmod/imagebuffer.h>
00039 #endif
00040
00041 namespace SPATMOD {
00042 namespace IMAGE {
00043
00044
00045
00047 class FILTER_DATATYPE : public FILTER {
00048 public:
00049
00051 enum MODE {
00052 MODE_Source = 0,
00053 MODE_RoundLimit = 1,
00054 MODE_RoundInvalidate = 2,
00055 MODE_RoundRescale = 3,
00056 MODE_RoundNoCheck = 4,
00057 MODE_FloorLimit = 5,
00058 MODE_FloorInvalidate = 6,
00059 MODE_FloorRescale = 7,
00060 MODE_FloorNoCheck = 8,
00061 MODE_Limit = MODE_RoundLimit,
00062 MODE_Invalidate = MODE_RoundInvalidate,
00063 MODE_Rescale = MODE_RoundRescale,
00064 MODE_NoCheck = MODE_RoundNoCheck,
00065 };
00066
00068 class SETTINGS {
00069 public:
00071 SETTINGS ();
00073 SETTINGS (
00074 DATATYPE DataType,
00075 MODE Mode
00076 );
00078 SETTINGS (
00079 DATATYPE DataType,
00080 MODE Mode,
00081 double MinValue,
00082 double MaxValue
00083 );
00085 MODE GetMode (
00086 ) const { return (m_Mode); }
00088 DATATYPE GetDataType (
00089 ) const { return (m_DataType); }
00091 bool GetDoFloor (
00092 ) const { return (m_DoFloor); }
00094 double GetMaxValue (
00095 ) const { return (m_MaxValue); }
00097 double GetMinValue (
00098 ) const { return (m_MinValue); }
00100 double GetOffset (
00101 ) const { return (m_Offset); }
00103 int GetPrecision (
00104 ) const {return (m_Precision); }
00106 double GetScale (
00107 ) const { return (m_Scale); }
00109 bool IsRangeFull (
00110 ) const { return (m_IsRangeFull); }
00112 bool IsRangeValid (
00113 ) const;
00115 void SetDataType (
00116 DATATYPE DataType
00117 );
00119 void SetDoFloor (
00120 bool DoFloor = true
00121 ) { m_DoFloor = DoFloor; }
00123 void SetMode (
00124 MODE Mode
00125 ) { m_Mode = Mode; }
00127 void SetPrecision (
00128 int Precision
00129 ) { m_Precision = Precision; }
00131 void SetRange (
00132 double MinValue,
00133 double MaxValue
00134 );
00135
00136 #ifndef GENERATING_DOXYGEN_OUTPUT
00137
00138 void ComputeRangeDefault (
00139 );
00140
00141 void ComputeScaleOffset (
00142 double SrcMinValue,
00143 double SrcMaxValue
00144 );
00145
00146 void Process (
00147 SAMPLEITERATOR& itTgt,
00148 UINT8 *TgtValidity,
00149 SAMPLEITERATOR& itSrc,
00150 INT32 NumColumns
00151 ) const;
00152 private:
00153 double m_MinValue;
00154 double m_MaxValue;
00155 double m_Scale;
00156 double m_Offset;
00157 int m_Precision;
00158 MODE m_Mode;
00159 DATATYPE m_DataType;
00160 bool m_IsRangeFull;
00161 bool m_DoFloor;
00162 #endif // GENERATING_DOXYGEN_OUTPUT
00163 };
00164
00166 FILTER_DATATYPE (
00167 STAGE *pSourceImage,
00168 bool TakeOwnership,
00169 DATATYPE TargetDataType,
00170 MODE Mode,
00171 bool PassOpacity = true
00172 );
00173
00175 FILTER_DATATYPE (
00176 STAGE *pSourceImage,
00177 bool TakeOwnership,
00178 DATATYPE TargetDataType,
00179 MODE Mode,
00180 double MinValue,
00181 double MaxValue,
00182 bool PassOpacity = true
00183 );
00184
00186 FILTER_DATATYPE (
00187 STAGE *pSourceImage,
00188 bool TakeOwnership,
00189 DATATYPE TargetDataType,
00190 int Precision,
00191 MODE Mode,
00192 bool PassOpacity = true
00193 );
00194
00196 FILTER_DATATYPE (
00197 STAGE *pSourceImage,
00198 bool TakeOwnership,
00199 DATATYPE TargetDataType,
00200 int Precision,
00201 MODE Mode,
00202 double MinValue,
00203 double MaxValue,
00204 bool PassOpacity = true
00205 );
00206
00208 FILTER_DATATYPE (
00209 STAGE *pSourceImage,
00210 bool TakeOwnership,
00211 const SETTINGS *Settings
00212 );
00213
00214
00215 virtual ~FILTER_DATATYPE ();
00216
00217 private:
00218 #ifndef GENERATING_DOXYGEN_OUTPUT
00219 SETTINGS *m_Settings;
00220
00221
00222 virtual ERRVALUE v_Initialize ();
00223 virtual ERRVALUE v_PullSubSection (const SECTION& SubSection, BUFFER& buffer);
00224
00225
00226 FILTER_DATATYPE (const FILTER_DATATYPE&);
00227 FILTER_DATATYPE& operator= (const FILTER_DATATYPE&);
00228 #endif // GENERATING_DOXYGEN_OUTPUT
00229
00230 };
00231
00232
00233
00234 }
00235 }
00236
00237 #endif // INC_SPATMOD_IMAGEFILTERDATATYPE_H
00238