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