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
00110 LT_STATUS init(LTIOStreamInf *stream,
00111 NITFReaderManager *manager,
00112 const ImageSegment *imageSegment,
00113 bool useWorldFile);
00114
00115 LT_STATUS addUnderlyingMetadata(const LTIImageStage &image);
00116
00117
00118 LTIScene computeBlockedScene(const LTIScene& scene) const;
00119 LT_STATUS copyIntoUserBuffer(const LTIScene& dstScene,
00120 LTISceneBuffer& dstBuffer) const;
00121 bool activeSceneContains(const LTIScene& scene) const;
00122 void putBlockIntoBuffer_SEQ(LTISceneBuffer& cBuffer,
00123 lt_uint8* buf,
00124 lt_uint32 blockRow,
00125 lt_uint32 blockCol,
00126 lt_uint32 blockBand) const;
00127 void putBlockIntoBuffer_BLOCK(LTISceneBuffer& cBuffer,
00128 lt_uint8* buf,
00129 lt_uint32 blockRow,
00130 lt_uint32 blockCol) const;
00131 void putBlockIntoBuffer_PIXEL(LTISceneBuffer& cBuffer,
00132 lt_uint8* buf,
00133 lt_uint32 blockRow,
00134 lt_uint32 blockCol) const;
00135 void putBlockIntoBuffer_ROW(LTISceneBuffer& cBuffer,
00136 lt_uint8* buf,
00137 lt_uint32 blockRow,
00138 lt_uint32 blockCol) const;
00139
00140
00141
00142 LTIOStreamInf *m_stream;
00143 NITFReaderManager *m_manager;
00144
00145 const ImageSegment *m_imageSegment;
00146 const FileHeader *m_fileHeader;
00147
00148 LTReusableBuffer *m_reusableBuffer;
00149 LTIScene *m_activeScene;
00150 LTISceneBuffer *m_activeSceneBuffer;
00151 };
00152
00153
00154 }
00155 LT_END_LIZARDTECH_NAMESPACE
00156
00157 #endif // ImageReader_H