00001
00002
00003
00004
00005
00006
00007
00008
00009
00011
00012
00013 #ifndef LTI_MULTIRESFILTER_H
00014 #define LTI_MULTIRESFILTER_H
00015
00016
00017 #include "lti_imageFilter.h"
00018 #include "lti_imageStageOverrides.h"
00019 #include "lti_scene.h"
00020
00021 LT_BEGIN_NAMESPACE(LizardTech)
00022
00023 class LTIResampler;
00024
00036 #ifdef SWIG
00037 class LTIMultiResFilter : public LTIImageFilter
00038 #else
00039 class LTIMultiResFilter : public LTIOverrideDimensions
00040 <LTIOverrideGeoCoord
00041 <LTIOverrideMagnification
00042 <LTIImageFilter> > >
00043 #endif
00044 {
00045 LTI_REFERENCE_COUNTED_BOILERPLATE(LTIMultiResFilter);
00046 public:
00059 LT_STATUS initialize(LTIImageStage* srcImage);
00060
00076 LT_STATUS initialize(LTIImageStage* srcImage,
00077 lt_int8 scaleFactor);
00078
00079 LT_STATUS initialize(LTIImageStage* srcImage,
00080 double deltaMag,
00081 double minMag,
00082 double maxMag);
00083
00084
00085 LT_STATUS getDimsAtMag(double mag,
00086 lt_uint32 &width,
00087 lt_uint32 &height) const;
00088
00089
00090 lt_int64 getEncodingCost(const LTIScene& scene) const;
00091 bool getReaderScene(const LTIScene &decodeScene,
00092 LTIScene &readerScene) const;
00093 virtual lt_uint32 getModifications(const LTIScene &scene) const;
00094
00099 LT_STATUS setResampleMethod(LTIResampleMethod resampleMethod);
00100
00101 void setMagSnapThreshold(double threshold);
00102
00103
00104
00105
00106 void setDeltaMagXY(double deltaMagX, double deltaMagY);
00107
00108
00109 static double magForIcon(const LTIImageStage &image,
00110 lt_uint32 iconSize);
00111
00112 protected:
00113 LT_STATUS decodeBegin(const LTIPixel &pixelProps,
00114 const LTIScene &fullScene);
00115 LT_STATUS decodeStrip(LTISceneBuffer &stripBuffer,
00116 const LTIScene &stripScene);
00117 LT_STATUS decodeEnd(void);
00118
00119 protected:
00120 enum Mode
00121 {
00122 MODE_INVALID,
00123 MODE_RESAMPLE,
00124 MODE_PASSTHROUGH,
00125 MODE_DOWNSAMPLE_FULLREAD,
00126 MODE_ALL_AT_ONCE
00127 };
00128
00129 bool getChildScene(const LTIScene &scene,
00130 Mode &mode,
00131 double &scaleX,
00132 double &scaleY,
00133 LTIScene &childScene) const;
00134
00135 enum
00136 {
00137
00138
00139
00140
00141
00142
00143
00144 kMaxMagnification = 512
00145 };
00146
00147 private:
00148 struct StripCache;
00149
00150 double m_deltaMagX;
00151 double m_deltaMagY;
00152
00153 double m_magSnapThreshold;
00154
00155 Mode m_mode;
00156 double m_scaleX;
00157 double m_scaleY;
00158 LTIScene m_childScene;
00159 double m_curY;
00160
00161 lt_int32 m_childStrip;
00162 lt_int32 m_myStrip;
00163
00164 StripCache *m_stripCache0;
00165 StripCache *m_stripCache1;
00166
00167 LTIResampler *m_resampler;
00168 };
00169
00170
00171 LT_END_NAMESPACE(LizardTech)
00172
00173 #endif // LTI_MULTIRESFILTER_H