//******************************************************************* // // License: MIT // // See LICENSE.txt file in the top level directory for more details. // // Author: Ken Melero // // Description: This class give the capability to access tiles from an // ADRG file. // //******************************************************************** // $Id: ossimAdrgTileSource.h 23664 2015-12-14 14:17:27Z dburken $ #ifndef ossimAdrgTileSource_HEADER #define ossimAdrgTileSource_HEADER #include #include class ossimImageData; class ossimAdrgHeader; class OSSIM_DLL ossimAdrgTileSource : public ossimImageHandler { public: enum { ADRG_TILE_WIDTH = 128, ADRG_TILE_HEIGHT = 128, ADRG_TILE_SIZE = 16384, // 128 * 128, BAND_OFFSET = 16384, // 8 * 2048, NUMBER_OF_BANDS = 3 }; enum ADRG_COLOR { RED_BAND = 0, // the ADRG rgb value GREEN_BAND = 1, BLUE_BAND = 2 }; ossimAdrgTileSource(); virtual ossimString getShortName()const; virtual ossimString getLongName()const; /** * @return Returns true on success, false on error. * * @note This method relies on the data member ossimImageData::theImageFile * being set. Callers should do a "setFilename" prior to calling this * method or use the ossimImageHandler::open that takes a file name and an * entry index. */ virtual bool open(); /** * Returns a pointer to a tile given an origin representing the upper * left corner of the tile to grab from the image. * Satisfies pure virtual requirement from TileSource class. */ virtual ossimRefPtr getTile(const ossimIrect& rect, ossim_uint32 resLevel=0); /** * Method to get a tile. * * @param result The tile to stuff. Note The requested rectangle in full * image space and bands should be set in the result tile prior to * passing. It will be an error if: * result.getNumberOfBands() != this->getNumberOfOutputBands() * * @return true on success false on error. If return is false, result * is undefined so caller should handle appropriately with makeBlank or * whatever. */ virtual bool getTile(ossimImageData* result, ossim_uint32 resLevel=0); /** * Returns the number of bands in the image. * Satisfies pure virtual requirement from ImageHandler class. */ virtual ossim_uint32 getNumberOfInputBands() const; virtual ossim_uint32 getNumberOfOutputBands()const; /** * Returns the number of lines in the image. * Satisfies pure virtual requirement from ImageHandler class. */ virtual ossim_uint32 getNumberOfLines(ossim_uint32 reduced_res_level = 0) const; /** * Returns the number of samples in the image. * Satisfies pure virtual requirement from ImageHandler class. */ virtual ossim_uint32 getNumberOfSamples(ossim_uint32 reduced_res_level = 0) const; /** * Returns the zero based image rectangle for the reduced resolution data * set (rrds) passed in. Note that rrds 0 is the highest resolution rrds. */ virtual ossimIrect getImageRectangle(ossim_uint32 reduced_res_level = 0) const; /** * Method to save the state of an object to a keyword list. * Return true if ok or false on error. */ virtual bool saveState(ossimKeywordlist& kwl, const char* prefix=0)const; /** * Method to the load (recreate) the state of an object from a keyword * list. Return true if ok or false on error. */ virtual bool loadState(const ossimKeywordlist& kwl, const char* prefix=0); /** * Returns the image geometry object associated with this tile source or NULL if non defined. */ virtual ossimRefPtr getImageGeometry(); /** * Returns the output pixel type of the tile source. */ virtual ossimScalarType getOutputScalarType() const; /** * Returns the width of the output tile. */ virtual ossim_uint32 getTileWidth() const; virtual void close(); /** * Returns the height of the output tile. */ virtual ossim_uint32 getTileHeight() const; virtual bool isOpen()const; /** * Returns the tile width of the image or 0 if the image is not tiled. * Note: this is not the same as the ossimImageSource::getTileWidth which * returns the output tile width, which can be different than the * internal image tile width on disk. */ virtual ossim_uint32 getImageTileWidth() const; /** * Returns the tile width of the image or 0 if the image is not tiled. * Note: this is not the same as the ossimImageSource::getTileHeight which * returns the output tile width which can be different than the internal * image tile width on disk. */ virtual ossim_uint32 getImageTileHeight() const; /** * @brief Gets a property for matching name. * @param name The name of the property to get. * @return Returns property matching "name". */ virtual ossimRefPtr getProperty(const ossimString& name)const; /** * @brief Gets a list of property names available. * @param propertyNames The list to push back names to. */ virtual void getPropertyNames(std::vector& propertyNames)const; protected: virtual ~ossimAdrgTileSource(); /** * Adjust point to even 128 boundary. Assumes 0,0 origin. */ void adjustToStartOfTile(ossimIpt& pt) const; /** * Returns true on success, false on error. */ bool fillBuffer(const ossimIrect& tile_rect, const ossimIrect& clip_rect, ossimImageData* tile); ossimRefPtr m_Tile; ossim_uint8* m_TileBuffer; std::ifstream m_FileStr; ossimAdrgHeader* m_AdrgHeader; TYPE_DATA }; #endif