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