00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012
00013 #ifndef LTI_MOSAIC_FILTER_H
00014 #define LTI_MOSAIC_FILTER_H
00015
00016
00017 #include "lti_imageStage.h"
00018 #include "lti_imageStageOverrides.h"
00019 #include "lti_imageStageManager.h"
00020 #include "lti_sceneBuffer.h"
00021
00022
00023
00024 LT_BEGIN_NAMESPACE(LizardTech)
00025
00026 class LTIRTree;
00027 class LTIEmbeddedImage;
00028 class LTIPipelineBuilder;
00029
00040 #ifdef SWIG
00041 class LTIMosaicFilter : public LTIImageStage
00042 #else
00043 class LTIMosaicFilter : public LTIOverrideDimensions
00044 <LTIOverridePixelProps
00045 <LTIOverrideBackgroundPixel
00046 <LTIOverrideGeoCoord
00047 <LTIOverrideMagnification
00048 <LTIOverrideIsSelective
00049 <LTIOverrideStripHeight
00050 <LTIOverrideDelegates
00051 <LTIOverridePixelLookupTables
00052 <LTIOverrideMetadata
00053 <LTIImageStage> > > > > > > > > >
00054 #endif
00055 {
00056 LTI_REFERENCE_COUNTED_BOILERPLATE(LTIMosaicFilter);
00057 public:
00080 LT_STATUS initialize(LTIImageStageManager *imageStageManager,
00081 const LTIPixel* backgroundPixel,
00082 bool useMultires);
00083
00094 static LT_STATUS checkResolutionConformance(LTIImageStageManager *imageStageManager,
00095 bool useMultires);
00096
00097
00098 LT_STATUS getDimsAtMag(double mag,
00099 lt_uint32 &width,
00100 lt_uint32 &height) const;
00101 LTIMaskSource *getMask() const;
00102
00103
00104 lt_int64 getEncodingCost(const LTIScene& scene) const;
00105 bool getReaderScene(const LTIScene &decodeScene,
00106 LTIScene &readerScene) const;
00107 virtual lt_uint32 getModifications(const LTIScene &scene) const;
00108
00114 void setFillMethod(LTIPixelFillMethod method,
00115 double fuzzyThreshold );
00116
00120 LTIPixelFillMethod getFillMethod(void) const;
00121 double getFuzzyThreshold(void) const;
00122
00127 void setResampleMethod(LTIResampleMethod resampleMethod);
00128
00129 void setMagSnapThreshold(double threshold);
00130
00134 LTIResampleMethod getResampleMethod(void) const;
00135
00136
00137 bool getReaderScene(lt_uint32 child,
00138 const LTIScene &decodeScene,
00139 LTIScene &mosaicScene,
00140 LTIScene &readerScene) const;
00141
00142 bool getOverviewReaderScene(const LTIScene &decodeScene,
00143 LTIScene &mosaicScene,
00144 LTIScene &readerScene) const;
00145
00146
00147 class InSceneCallback
00148 {
00149 public:
00150 virtual LT_STATUS found(const LTIScene &scene,
00151 lt_uint32 imageNum,
00152 LTIEmbeddedImage &embedded,
00153 LTIImageStage &image) = 0;
00154 };
00155
00156
00157 LT_STATUS forEachImageStageInScene(const LTIScene &scene,
00158 InSceneCallback &callback);
00159
00160
00161 void setDeleteImages(bool deleteImages);
00162
00163 bool getDeleteImages(void) const;
00164
00165
00166 LT_STATUS loadImage(lt_uint32 i,
00167 LTIEmbeddedImage *&embedded,
00168 LTIImageStage *&raw);
00169
00170 LT_STATUS closeImage(lt_uint32 i);
00171
00172
00173
00174
00175 LT_STATUS setPipelineBuilder(LTIPipelineBuilder *pipelineBuilder);
00176
00177
00178 const LTIRTree &getRTree(void) const;
00179
00180 LTIImageStageManager &getImageStageManager(void) const;
00181
00182
00183 bool hasOverviewImage(void) const;
00184
00185 double getOverviewMag(void) const;
00186
00187 protected:
00188 LT_STATUS decodeBegin(const LTIPixel &pixelProps,
00189 const LTIScene &fullScene);
00190 LT_STATUS decodeStrip(LTISceneBuffer &stripBuffer,
00191 const LTIScene &stripScene);
00192 LT_STATUS decodeEnd(void);
00193
00194 private:
00195 class ListImageStagesInSceneCallback;
00196 struct TileInfo;
00197
00198 LT_STATUS setupPixelProps(TileInfo *tiles, lt_uint32 numTiles,
00199 const LTIPixel *background);
00200
00201 LT_STATUS setupGeoProps(TileInfo *tiles, lt_uint32 numTiles,
00202 bool useMultires);
00203
00204 LT_STATUS setupBuffers(lt_uint32 numTiles);
00205 LT_STATUS setupOverview(void);
00206
00207 LTIImageStageManager *m_imageStageManager;
00208
00209 LTIRTree *m_rtree;
00210
00211
00212 LTIImageStage **m_rImage;
00213 LTIEmbeddedImage **m_fImage;
00214 int *m_sImage;
00215 LTIPixelFillMethod m_fillMethod;
00216 double m_fuzzyThreshold;
00217 LTIResampleMethod m_resampleMethod;
00218 double m_magSnapThreshold;
00219 bool m_deleteImages;
00220
00221 LTIPipelineBuilder *m_pipelineBuilder;
00222
00223
00224 lt_uint32 *m_inSceneList;
00225
00226 LTIEmbeddedImage *m_overview;
00227 double m_overviewMag;
00228 };
00229
00230 #ifndef DOXYGEN_EXCLUDE
00231
00232 class LTIPipelineBuilder
00233 {
00234 public:
00235 virtual LT_STATUS buildPipeline(lt_uint32 tileId,
00236 LTIImageStage *&pipeline) = 0;
00237 };
00238
00239 #endif
00240
00241 LT_END_NAMESPACE(LizardTech)
00242
00243
00244 #endif // LTI_MOSAIC_FILTER_H