00001
00002
00003
00004
00005
00006
00007
00008
00010
00011
00012 #ifndef ImageReader_H
00013 #define ImageReader_H
00014
00015
00016 #include "lt_base.h"
00017
00018
00019 #include "lti_geoImageReader.h"
00020
00021
00022 #include "nitf_types.h"
00023
00024 LT_BEGIN_LIZARDTECH_NAMESPACE
00025 class LTFileSpec;
00026 class LTIOStreamInf;
00027 class LTReusableBuffer;
00028 class NITFReaderManager;
00029
00030 namespace Nitf {
00031 class FileHeader;
00032 class ImageSegment;
00033 class ImageSegmentMetadata;
00034 class SecurityMetadata;
00035
00036
00046 class ImageReader : public LTIGeoImageReader
00047 {
00048 LT_DISALLOW_COPY_CONSTRUCTOR(ImageReader);
00049 public:
00053 const char* getIID1() const;
00054
00055 lt_int64 getPhysicalFileSize() const;
00056
00057
00058 NITFReaderManager& getManager() const;
00059
00063 Format getFormat() const;
00064
00068 Layout getLayout() const;
00069
00073 bool isBlocked() const;
00074
00078 bool isMasked() const;
00079
00083 int getSegmentNumber() const;
00084
00088 const ImageSegmentMetadata* getImageMetadata() const;
00089
00093 const SecurityMetadata* getSecurityMetadata() const;
00094
00095
00096 LT_STATUS getDimsAtMag(double mag,
00097 lt_uint32& width,
00098 lt_uint32& height) const = 0;
00099
00100
00101
00102
00103 virtual LT_STATUS setTileMaskList(const lt_uint32* tileMaskList, lt_uint32 tileMaskListLen);
00104
00105 protected:
00106 ~ImageReader(void);
00107 ImageReader(bool supportBandSelection);
00108
00109 const char *getSourceName(void) const;
00110
00111 LT_STATUS init(LTIOStreamInf *stream,
00112 NITFReaderManager *manager,
00113 const ImageSegment *imageSegment,
00114 bool useWorldFile);
00115
00116 LT_STATUS addUnderlyingMetadata(const LTIImageStage &image);
00117
00118
00119 LTIScene computeBlockedScene(const LTIScene& scene) const;
00120 LT_STATUS copyIntoUserBuffer(const LTIScene& dstScene,
00121 LTISceneBuffer& dstBuffer) const;
00122 bool activeSceneContains(const LTIScene& scene) const;
00123 void putBlockIntoBuffer_SEQ(LTISceneBuffer& cBuffer,
00124 lt_uint8* buf,
00125 lt_uint32 blockRow,
00126 lt_uint32 blockCol,
00127 lt_uint32 blockBand) const;
00128 void putBlockIntoBuffer_BLOCK(LTISceneBuffer& cBuffer,
00129 lt_uint8* buf,
00130 lt_uint32 blockRow,
00131 lt_uint32 blockCol) const;
00132 void putBlockIntoBuffer_PIXEL(LTISceneBuffer& cBuffer,
00133 lt_uint8* buf,
00134 lt_uint32 blockRow,
00135 lt_uint32 blockCol) const;
00136 void putBlockIntoBuffer_ROW(LTISceneBuffer& cBuffer,
00137 lt_uint8* buf,
00138 lt_uint32 blockRow,
00139 lt_uint32 blockCol) const;
00140
00141
00142
00143 LTIOStreamInf *m_stream;
00144 NITFReaderManager *m_manager;
00145
00146 const ImageSegment *m_imageSegment;
00147 const FileHeader *m_fileHeader;
00148
00149 LTReusableBuffer *m_reusableBuffer;
00150 LTIScene *m_activeScene;
00151 LTISceneBuffer *m_activeSceneBuffer;
00152 };
00153
00154
00155 }
00156 LT_END_LIZARDTECH_NAMESPACE
00157
00158 #endif // ImageReader_H