MrSID Decode SDK for Raster Reference Manual  9.5.1.4427
lti_sceneBuffer.h
Go to the documentation of this file.
00001 /* $Id$ */
00002 /* //////////////////////////////////////////////////////////////////////////
00003 //                                                                         //
00004 // This code is Copyright (c) 2004 LizardTech, Inc, 1008 Western Avenue,   //
00005 // Suite 200, Seattle, WA 98104.  Unauthorized use or distribution         //
00006 // prohibited.  Access to and use of this code is permitted only under     //
00007 // license from LizardTech, Inc.  Portions of the code are protected by    //
00008 // US and foreign patents and other filings. All Rights Reserved.          //
00009 //                                                                         //
00011 /* PUBLIC */
00012 
00013 #ifndef LTI_SCENEBUFFER_H
00014 #define LTI_SCENEBUFFER_H
00015 
00016 // lt_lib_mrsid_core
00017 #include "lti_types.h"
00018 
00019 
00020 LT_BEGIN_NAMESPACE(LizardTech)
00021 
00022 
00057 class LTISceneBuffer
00058 {
00059    LT_DISALLOW_COPY_CONSTRUCTOR(LTISceneBuffer);
00060 public:
00061    static const double DefaultFuzzyThreshold;
00062 
00068    ~LTISceneBuffer();
00069 
00085    LTISceneBuffer(const LTIPixel &pixelProps,
00086                   lt_uint32 numCols,
00087                   lt_uint32 numRows,
00088                   void **bsqData,
00089                   lt_uint32 totalNumCols = 0);
00090 
00111    LTISceneBuffer(const LTIPixel &pixelProps,
00112                   lt_uint32 totalNumCols,
00113                   lt_uint32 totalNumRows,
00114                   lt_uint32 colOffset,
00115                   lt_uint32 rowOffset,
00116                   lt_uint32 numCols,
00117                   lt_uint32 numRows,
00118                   void **bsqData);
00119 
00135    LTISceneBuffer(const LTISceneBuffer &original,
00136                   lt_uint32 colOffset,
00137                   lt_uint32 rowOffset,
00138                   lt_uint32 numCols,
00139                   lt_uint32 numRows);
00140 
00153    LTISceneBuffer(const LTISceneBuffer &original,
00154                   lt_uint32 colOffset,
00155                   lt_uint32 rowOffset);
00156 
00163 
00171    lt_int32 getNumCols() const;
00172 
00180    lt_int32 getNumRows() const;
00181 
00190    lt_int32 getTotalNumCols() const;
00191 
00192    
00202    lt_int32 getNumPixels() const;
00203 
00211    const LTIPixel &getPixelProps() const;
00212 
00222    lt_uint16 getNumBands() const;
00223    
00224    lt_uint16 getSourceBandIndex(lt_uint16 dstBand) const;
00225 
00226    // return -1 for not wanted
00227    int getDestinationBandIndex(lt_uint16 srcBand) const;
00234 
00235    
00244    void **getBSQData() const;
00245    
00254    void *getBandData(lt_uint16 band) const;
00255    
00267    void *getSample(lt_uint32 x, lt_uint32 y, lt_uint16 band) const;
00268 
00280 
00290     LT_STATUS importData(const LTISceneBuffer &sourceData);
00291 
00303     LT_STATUS importDataBand(lt_uint16 dstBand,
00304                             const LTISceneBuffer& sourceData,
00305                             lt_uint16 srcBand);
00306 
00325    LT_STATUS mergeData(LTIPixelFillMethod fillMethod,
00326                        const LTISceneBuffer& srcBuf,
00327                        const LTIPixel *srcNodata,
00328                        const LTIPixel *dstNodata,
00329                        double mag,
00330                        double fuzzyThreshold,
00331                        bool blend);
00332 
00343    LT_STATUS importDataBSQ(void** data);
00344 
00354    LT_STATUS importDataBSQ(void* data);
00355 
00365    LT_STATUS importDataBIP(void* data);
00366 
00376    LT_STATUS importDataBSQ(LTIOStreamInf& stream);
00377 
00387    LT_STATUS importDataBIP(LTIOStreamInf& stream);
00390    // for LizardTech internal use only
00391    LT_STATUS importData(const LTIMask *binaryMask,
00392                         const LTISceneBuffer &sourceData,
00393                         bool blend);
00394 
00395    // for LizardTech internal use only
00396    LT_STATUS importDataBand(lt_uint16 dstBand,
00397                             const LTISceneBuffer& sourceData,
00398                             lt_uint16 srcBand,
00399                             const LTIMask *binaryMask);
00400 
00401    // for LizardTech internal use only
00402    LT_STATUS mergeData(LTIPixelFillMethod fillMethod,
00403                        const LTISceneBuffer& srcBuf,
00404                        const LTIPixel *srcNodata,
00405                        const LTIPixel *dstNodata,
00406                        LTIMaskSource *mask,
00407                        LTIScene &scene,
00408                        double fuzzyThreshold,
00409                        bool blend);
00410 
00420 
00435    LT_STATUS exportDataBSQ(void**& data) const;
00436 
00451    LT_STATUS exportDataBSQ(void*& data) const;
00452 
00467    LT_STATUS exportDataBIP(void*& data) const;
00468 
00478    LT_STATUS exportDataBSQ(LTIOStreamInf& stream) const;
00479 
00489    LT_STATUS exportDataBIP(LTIOStreamInf& stream) const;
00490 
00509    LT_STATUS exportData(void* data,
00510                         lt_uint32 pixelBytes,
00511                         lt_uint32 rowBytes,
00512                         lt_uint32 bandBytes) const;
00515    void byteSwap();
00516 
00517    // for LizardTech internal use only
00518    LT_STATUS applyMask(const LTIMask &mask, const LTIPixel &color);
00519    void applyMask(const LTIMask &mask, const LTIPixel &color, lt_uint16 band);
00520 
00521    LT_STATUS fill(const LTIPixel &color);
00522    void fill(const LTIPixel &color, lt_uint16 band);
00523 
00524    void zero(void);
00525    void zero(lt_uint16 band);
00526 
00527 
00543    static lt_uint32 addAlignment(lt_uint32 value, lt_uint32 byteAlignment);
00544 
00545    // for LizardTech internal use only
00546    static LT_STATUS buildMask(LTIPixelFillMethod fillMethod,
00547                               double mag,
00548                               double fuzzyThreshold,
00549                               bool blend,
00550                               const LTISceneBuffer &dstBuffer, 
00551                               const LTIPixel *dstNodata,
00552                               const LTISceneBuffer &srcBuffer,
00553                               const LTIPixel *srcNodata,
00554                               LTIMask &binaryMask);
00555    LT_STATUS calculateMask(LTIPixelFillMethod fillMethod,
00556                            double mag,
00557                            double fuzzyThreshold,
00558                            bool blend,
00559                            const LTIPixel *srcNodata,
00560                            LTIMask &mask) const;
00561    static void shiftNoDataValue(LTIPixelFillMethod fillMethod,
00562                                 double fuzzyThreshold,
00563                                 double mag,
00564                                 const LTIPixel &dstMin,
00565                                 const LTIPixel &dstMax,
00566                                 const LTIPixel &dstNoData,
00567                                 LTIPixel &shiftedValue);
00568 
00569 
00570 #if !defined(SWIG) && 1
00571 #define DEPRECATE(OLD, NEW) LT_DEPRECATED(NEW) OLD { return NEW; }
00572    DEPRECATE(lt_int32 getTotalNumRows() const, getNumRows());
00573    DEPRECATE(lt_int32 getWindowColOffset() const, 0);
00574    DEPRECATE(lt_int32 getWindowRowOffset() const, 0);
00575    DEPRECATE(lt_int32 getWindowNumCols() const, getNumCols());
00576    DEPRECATE(lt_int32 getWindowNumRows() const, getNumRows());
00577    DEPRECATE(lt_int32 getTotalNumPixels() const, getNumPixels());
00578    DEPRECATE(lt_int32 getWindowNumPixels() const, getNumPixels());
00579    DEPRECATE(void** getTotalBSQData() const, getBSQData());
00580    DEPRECATE(void* getTotalBandData(lt_uint16 band) const, getBandData(band));
00581    DEPRECATE(void** getWindowBSQData() const, getBSQData());
00582    DEPRECATE(void* getWindowBandData(lt_uint16 band) const, getBandData(band));
00583    DEPRECATE(void* getTotalSample(lt_uint32 x, lt_uint32 y, lt_uint16 band) const, getSample(x, y, band));
00584    DEPRECATE(void* getWindowSample(lt_uint32 x, lt_uint32 y, lt_uint16 band) const, getSample(x, y, band));
00585    DEPRECATE(bool inWindow(lt_int32 x, lt_int32 y) const, (x < getNumCols() && y < getNumRows()));
00586 #undef DEPRECATE
00587 #endif
00588 protected:
00592    LT_STATUS checkImpedance(const LTIPixel &p) const;
00593 
00594 private:
00595    void init(const LTIPixel& pixelProps,
00596              lt_uint32 colOffset,
00597              lt_uint32 rowOffset,
00598              lt_uint32 numCols,
00599              lt_uint32 numRows,
00600              void **bsqData,
00601              lt_uint32 totalNumCols,
00602              lt_uint32 totalNumRows);
00603 
00604    lt_uint16 m_numBands;
00605    LTIPixel *m_pixelProps;
00606 
00607    lt_uint32 m_numCols;
00608    lt_uint32 m_numRows;
00609    lt_uint32 m_totalNumCols;
00610    
00611    void **m_data;
00612    bool m_ownsData;
00613 
00614 
00615    bool operator==(const LTISceneBuffer&) const;
00616    bool operator!=(const LTISceneBuffer&) const;
00617 };
00618 
00619 LT_END_NAMESPACE(LizardTech)
00620 
00621 #endif // LTI_SCENEBUFFER_H