00001
00024 #ifndef INC_SPATMOD_IMAGEFILTERGAPFILL_H
00025 #define INC_SPATMOD_IMAGEFILTERGAPFILL_H
00026
00027 #ifndef INC_SPATMOD_IMAGEFILTER_H
00028 #include <spatmod/imagefilter.h>
00029 #endif
00030
00031 #ifndef INC_MI32_MILIST_H
00032 #include <mi32/milist.h>
00033 #endif
00034
00035 #ifndef INC_MI32_BITSET_H
00036 #include <mi32/bitset.h>
00037 #endif
00038
00039 #ifndef INC_MI32_DOUBLEAR_H
00040 #include <mi32/doublear.h>
00041 #endif
00042
00043 #include <vector>
00044
00045 namespace SPATMOD {
00046 namespace IMAGE {
00047
00048
00049
00051 class FILTER_GAPFILL : public FILTER {
00052 public:
00053
00054 enum METHOD {
00055 METHOD_None = 0,
00056 METHOD_Nearest,
00057 METHOD_InverseLinear,
00058 METHOD_InverseSquare
00059 };
00060
00062 FILTER_GAPFILL (
00063 STAGE *pPreviousStage,
00064 bool TakeOwnership,
00065 METHOD Method,
00066 INT32 GapWidth
00067 );
00068
00069
00070 virtual ~FILTER_GAPFILL ();
00071
00072 private:
00073 #ifndef GENERATING_DOXYGEN_OUTPUT
00074 class TESTPOS {
00075 public:
00076 TESTPOS () : m_dx(0), m_dy(0) { }
00077 TESTPOS (INT32 dx, INT32 dy) : m_dx(static_cast<INT8>(dx)), m_dy(static_cast<INT8>(dy)) { }
00078 INT8 GetDx () const { return (m_dx); }
00079 INT8 GetDy () const { return (m_dy); }
00080 private:
00081 INT8 m_dx;
00082 INT8 m_dy;
00083 };
00084 typedef MILIST<TESTPOS> TESTPOSLIST;
00085
00086 typedef UINT8* PTRUINT8;
00087
00088 METHOD m_Method;
00089 INT32 m_GapWidth;
00090 INT32 m_GapWidth21;
00091 DATATYPE m_DataType;
00092 std::vector<TESTPOSLIST> m_TestPosLists[8];
00093 PTRUINT8 *m_SrcValidityArray;
00094 DOUBLE_ARRAY<double> m_TotValue;
00095 SIMPLE_ARRAY<UINT16> m_UsedArray;
00096 DOUBLE_ARRAY<double> m_Weight;
00097
00098 void AddTestItem (INT32 d, INT32 dx, INT32 dy);
00099 void FillCellUINT8 (INT32 row, INT32 col, BUFFER& TgtBuffer, const BUFFER& SrcBuffer);
00100 void FillCellSINT8 (INT32 row, INT32 col, BUFFER& TgtBuffer, const BUFFER& SrcBuffer);
00101 void FillCellUINT16 (INT32 row, INT32 col, BUFFER& TgtBuffer, const BUFFER& SrcBuffer);
00102 void FillCellSINT16 (INT32 row, INT32 col, BUFFER& TgtBuffer, const BUFFER& SrcBuffer);
00103 void FillCellUINT32 (INT32 row, INT32 col, BUFFER& TgtBuffer, const BUFFER& SrcBuffer);
00104 void FillCellSINT32 (INT32 row, INT32 col, BUFFER& TgtBuffer, const BUFFER& SrcBuffer);
00105 void FillCellFLOAT32 (INT32 row, INT32 col, BUFFER& TgtBuffer, const BUFFER& SrcBuffer);
00106 void FillCellFLOAT64 (INT32 row, INT32 col, BUFFER& TgtBuffer, const BUFFER& SrcBuffer);
00107
00108
00109 virtual ERRVALUE v_Initialize ();
00110 virtual ERRVALUE v_PullBegin (const SECTION_ITERATOR& iterator);
00111 virtual ERRVALUE v_PullSubSection (const SECTION& SubSection, BUFFER& buffer);
00112
00113
00114 FILTER_GAPFILL (const FILTER_GAPFILL&);
00115 FILTER_GAPFILL& operator= (const FILTER_GAPFILL&);
00116 #endif // GENERATING_DOXYGEN_OUTPUT
00117
00118 };
00119
00120
00121
00122 }
00123 }
00124
00125 #endif // INC_SPATMOD_IMAGEFILTERGAPFILL_H
00126