MrSID Decode SDK for Raster Reference Manual
9.0.0.3864
|
00001 /* $Id$ */ 00002 /* ////////////////////////////////////////////////////////////////////////// 00003 // // 00004 // This code is Copyright (c) 2004 LizardTech, Inc, 1008 Western Avenue, // 00005 // Suite 200, Seattle, WA 98104. Unauthorized use or distribution // 00006 // prohibited. Access to and use of this code is permitted only under // 00007 // license from LizardTech, Inc. Portions of the code are protected by // 00008 // US and foreign patents and other filings. All Rights Reserved. // 00009 // // 00011 /* PUBLIC */ 00012 00013 #ifndef LTI_MOSAIC_FILTER_H 00014 #define LTI_MOSAIC_FILTER_H 00015 00016 // lt_lib_mrsid_core 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 // LTIImage 00108 LT_STATUS getDimsAtMag(double mag, 00109 lt_uint32 &width, 00110 lt_uint32 &height) const; 00111 00112 // LTIImageStage 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 /*= LTISceneBuffer::DefaultFuzzyThreshold*/); 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 // for LizardTech internal use only 00148 bool getReaderScene(lt_uint32 child, 00149 const LTIScene &decodeScene, 00150 LTIScene &mosaicScene, 00151 LTIScene &readerScene) const; 00152 // for LizardTech internal use only 00153 bool getOverviewReaderScene(const LTIScene &decodeScene, 00154 LTIScene &mosaicScene, 00155 LTIScene &readerScene) const; 00156 00157 // for LizardTech internal use only 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 // for LizardTech internal use only 00168 LT_STATUS forEachImageStageInScene(const LTIScene &scene, 00169 InSceneCallback &callback); 00170 00171 // for LizardTech internal use only 00172 void setDeleteImages(bool deleteImages); 00173 // for LizardTech internal use only 00174 bool getDeleteImages(void) const; 00175 00176 // for LizardTech internal use only 00177 LT_STATUS loadImage(lt_uint32 i, 00178 LTIEmbeddedImage *&embedded, 00179 LTIImageStage *&raw); 00180 // for LizardTech internal use only 00181 LT_STATUS closeImage(lt_uint32 i); 00182 00183 // for LizardTech internal use only 00184 // does not take ownship of pipelineBuilder 00185 // don't call this function in inside a decodeBegin()/decodeStrip()/decodeEnd() loop 00186 LT_STATUS setPipelineBuilder(LTIPipelineBuilder *pipelineBuilder); 00187 00188 // for LizardTech internal use only 00189 const LTIRTree &getRTree(void) const; 00190 // for LizardTech internal use only 00191 LTIImageStageManager &getImageStageManager(void) const; 00192 00193 // for LizardTech internal use only 00194 bool hasOverviewImage(void) const; 00195 // for LizardTech internal use only 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 // open image book keeping 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 // imageInScene 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