MrSID Decode SDK for Raster Reference Manual
9.5.4.4709
|
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 lt_uint32 getModifications(const LTIScene &scene) const; 00112 LT_STATUS getMetadataBlob(const char *type, LTIOStreamInf *&stream) const; 00113 00114 // LTIImageStage 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 /*= LTISceneBuffer::DefaultFuzzyThreshold*/); 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 // for LizardTech internal use only 00151 bool getReaderScene(lt_uint32 child, 00152 const LTIScene &decodeScene, 00153 LTIScene &mosaicScene, 00154 LTIScene &readerScene) const; 00155 // for LizardTech internal use only 00156 bool getOverviewReaderScene(const LTIScene &decodeScene, 00157 LTIScene &mosaicScene, 00158 LTIScene &readerScene) const; 00159 00160 // for LizardTech internal use only 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 // for LizardTech internal use only 00171 LT_STATUS forEachImageStageInScene(const LTIScene &scene, 00172 InSceneCallback &callback); 00173 00174 // for LizardTech internal use only 00175 void setDeleteImages(bool deleteImages); 00176 // for LizardTech internal use only 00177 bool getDeleteImages(void) const; 00178 00179 // for LizardTech internal use only 00180 LT_STATUS loadImage(lt_uint32 i, 00181 LTIEmbeddedImage *&embedded, 00182 LTIImageStage *&raw); 00183 // for LizardTech internal use only 00184 LT_STATUS closeImage(lt_uint32 i); 00185 00186 // for LizardTech internal use only 00187 // does not take ownship of pipelineBuilder 00188 // don't call this function in inside a decodeBegin()/decodeStrip()/decodeEnd() loop 00189 LT_STATUS setPipelineBuilder(LTIPipelineBuilder *pipelineBuilder); 00190 00191 // for LizardTech internal use only 00192 const LTIRTree &getRTree(void) const; 00193 // for LizardTech internal use only 00194 LTIImageStageManager &getImageStageManager(void) const; 00195 00196 // for LizardTech internal use only 00197 bool hasOverviewImage(void) const; 00198 // for LizardTech internal use only 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 // open image book keeping 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 // imageInScene 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