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:
00058 enum AlphaMode
00059 {
00060 DoNothing,
00061 FromMerge,
00062 FromSourceRectangle,
00063 };
00064
00088 LT_STATUS initialize(LTIImageStageManager *imageStageManager,
00089 const LTIPixel* backgroundPixel,
00090 bool useMultires,
00091 bool mergeMetadata = true,
00092 AlphaMode alphaMode = DoNothing);
00093
00104 static LT_STATUS checkResolutionConformance(LTIImageStageManager *imageStageManager,
00105 bool useMultires);
00106
00107
00108 LT_STATUS getDimsAtMag(double mag,
00109 lt_uint32 &width,
00110 lt_uint32 &height) const;
00111
00112
00113 lt_int64 getEncodingCost(const LTIScene& scene) const;
00114 bool getReaderScene(const LTIScene &decodeScene,
00115 LTIScene &readerScene) const;
00116 virtual lt_uint32 getModifications(const LTIScene &scene) const;
00117 LTIMaskSource *getMask() const;
00118 bool getPipelineInfo(LTIPipelineInfo info) const;
00119
00125 void setFillMethod(LTIPixelFillMethod method,
00126 double fuzzyThreshold );
00127
00131 LTIPixelFillMethod getFillMethod(void) const;
00132 double getFuzzyThreshold(void) const;
00133
00138 void setResampleMethod(LTIResampleMethod resampleMethod);
00139
00140 void setMagSnapThreshold(double threshold);
00141
00145 LTIResampleMethod getResampleMethod(void) const;
00146
00147
00148 bool getReaderScene(lt_uint32 child,
00149 const LTIScene &decodeScene,
00150 LTIScene &mosaicScene,
00151 LTIScene &readerScene) const;
00152
00153 bool getOverviewReaderScene(const LTIScene &decodeScene,
00154 LTIScene &mosaicScene,
00155 LTIScene &readerScene) const;
00156
00157
00158 class InSceneCallback
00159 {
00160 public:
00161 virtual LT_STATUS found(const LTIScene &scene,
00162 lt_uint32 imageNum,
00163 LTIEmbeddedImage &embedded,
00164 LTIImageStage &image) = 0;
00165 };
00166
00167
00168 LT_STATUS forEachImageStageInScene(const LTIScene &scene,
00169 InSceneCallback &callback);
00170
00171
00172 void setDeleteImages(bool deleteImages);
00173
00174 bool getDeleteImages(void) const;
00175
00176
00177 LT_STATUS loadImage(lt_uint32 i,
00178 LTIEmbeddedImage *&embedded,
00179 LTIImageStage *&raw);
00180
00181 LT_STATUS closeImage(lt_uint32 i);
00182
00183
00184
00185
00186 LT_STATUS setPipelineBuilder(LTIPipelineBuilder *pipelineBuilder);
00187
00188
00189 const LTIRTree &getRTree(void) const;
00190
00191 LTIImageStageManager &getImageStageManager(void) const;
00192
00193
00194 bool hasOverviewImage(void) const;
00195
00196 double getOverviewMag(void) const;
00197
00198 protected:
00199 LT_STATUS decodeBegin(const LTIPixel &pixelProps,
00200 const LTIScene &fullScene);
00201 LT_STATUS decodeStrip(LTISceneBuffer &stripBuffer,
00202 const LTIScene &stripScene);
00203 LT_STATUS decodeEnd(void);
00204
00205 private:
00206 class ListImageStagesInSceneCallback;
00207 struct TileInfo;
00208
00209 LT_STATUS setupPixelProps(TileInfo *tiles, lt_uint32 numTiles,
00210 const LTIPixel *background,
00211 bool mergeMetadata);
00212
00213 LT_STATUS setupGeoProps(TileInfo *tiles, lt_uint32 numTiles,
00214 bool useMultires);
00215
00216 LT_STATUS setupBuffers(lt_uint32 numTiles);
00217 LT_STATUS setupOverview(void);
00218
00219 LTIImageStageManager *m_imageStageManager;
00220
00221 LTIRTree *m_rtree;
00222
00223
00224 LTIImageStage **m_rImage;
00225 LTIEmbeddedImage **m_fImage;
00226 int *m_sImage;
00227 LTIPixelFillMethod m_fillMethod;
00228 double m_fuzzyThreshold;
00229 AlphaMode m_alphaMode;
00230 LTIResampleMethod m_resampleMethod;
00231 double m_magSnapThreshold;
00232 bool m_deleteImages;
00233
00234 LTIPipelineBuilder *m_pipelineBuilder;
00235
00236
00237 lt_uint32 *m_inSceneList;
00238
00239 LTIEmbeddedImage *m_overview;
00240 double m_overviewMag;
00241 };
00242
00243 #ifndef DOXYGEN_EXCLUDE
00244
00245 class LTIPipelineBuilder
00246 {
00247 public:
00248 virtual LT_STATUS buildPipeline(lt_uint32 tileId,
00249 LTIImageStage *&pipeline) = 0;
00250 };
00251
00252 #endif
00253
00254 LT_END_NAMESPACE(LizardTech)
00255
00256
00257 #endif // LTI_MOSAIC_FILTER_H