1 //*******************************************************************. 2 // 3 // License: See top level LICENSE.txt file. 4 // 5 // Author: Garrett Potts 6 // 7 //************************************************************************* 8 // 9 #ifndef ossimMemoryImageSource_HEADER 10 #define ossimMemoryImageSource_HEADER 1 11 12 #include <ossim/base/ossimConstants.h> 13 #include <ossim/imaging/ossimImageData.h> 14 #include <ossim/imaging/ossimImageGeometry.h> 15 #include <ossim/imaging/ossimImageSource.h> 16 17 class OSSIM_DLL ossimMemoryImageSource : public ossimImageSource 18 { 19 public: 20 ossimMemoryImageSource(); ossimMemoryImageSource(const ossimMemoryImageSource & src)21 ossimMemoryImageSource(const ossimMemoryImageSource& src) 22 :ossimImageSource(src), 23 m_image(src.m_image.valid()?(ossimImageData*)src.m_image->dup():(ossimImageData*)0), 24 m_result(0), 25 m_geometry(src.m_geometry.valid()?(ossimImageGeometry*)src.m_geometry->dup():(ossimImageGeometry*)0), 26 m_boundingRect(src.m_boundingRect) 27 { 28 } dup()29 ossimMemoryImageSource* dup()const 30 { 31 return new ossimMemoryImageSource(*this); 32 } 33 void setImage(ossimRefPtr<ossimImageData> image); 34 void setImage(ossimScalarType scalarType, 35 ossim_uint32 numberOfBands, 36 ossim_uint32 width, 37 ossim_uint32 height); 38 void setRect(ossim_uint32 ulx, 39 ossim_uint32 uly, 40 ossim_uint32 width, 41 ossim_uint32 height); 42 virtual ossim_uint32 getNumberOfInputBands() const; 43 virtual ossim_uint32 getNumberOfOutputBands() const; 44 virtual ossimScalarType getOutputScalarType() const; 45 virtual double getNullPixelValue(ossim_uint32 band=0)const; 46 virtual double getMinPixelValue(ossim_uint32 band=0)const; 47 virtual double getMaxPixelValue(ossim_uint32 band=0)const; 48 49 virtual ossimIrect getBoundingRect(ossim_uint32 resLevel=0)const; 50 51 virtual ossimRefPtr<ossimImageData> getTile(const ossimIrect& rect, 52 ossim_uint32 resLevel=0); 53 54 virtual bool canConnectMyInputTo(ossim_int32 myInputIndex, 55 const ossimConnectableObject* object)const; 56 57 virtual void initialize(); 58 virtual ossim_uint32 getNumberOfDecimationLevels() const; 59 virtual void getDecimationFactor(ossim_uint32 resLevel, 60 ossimDpt& result) const; 61 virtual void getDecimationFactors(std::vector<ossimDpt>& decimations)const; 62 63 //! Returns the image geometry object associated with this tile source or NULL if not defined. 64 //! The geometry contains full-to-local image transform as well as projection (image-to-world) 65 //! Default implementation returns the image geometry object associated with the next 66 //! (left) input source (if any) connected to this source in the chain, or NULL. getImageGeometry()67 virtual ossimRefPtr<ossimImageGeometry> getImageGeometry() 68 { 69 return m_geometry; 70 } 71 72 //! Default implementation sets geometry of the first input to the geometry specified. setImageGeometry(ossimImageGeometry * geom)73 virtual void setImageGeometry(ossimImageGeometry* geom) 74 { 75 m_geometry = geom; 76 } 77 78 /** 79 * save state is not implemented for this source and only passes to the base. 80 */ 81 virtual bool saveState(ossimKeywordlist& kwl, const char* prefix=0)const; 82 83 /** 84 * loadState is here so one can construct a memory source as a blank tile. 85 */ 86 virtual bool loadState(const ossimKeywordlist& kwl, const char* prefix=0); 87 88 protected: 89 ossimRefPtr<ossimImageData> m_image; 90 ossimRefPtr<ossimImageData> m_result; 91 ossimRefPtr<ossimImageGeometry> m_geometry; 92 ossimIrect m_boundingRect; 93 TYPE_DATA 94 }; 95 96 #endif 97