00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167 #ifndef INC_RVC_RASTER_H
00168 #define INC_RVC_RASTER_H
00169
00170 #ifndef INC_RVC_IMAGE_H
00171 #include <rvc/image.h>
00172 #endif
00173
00174 #ifndef INC_MI32_ANYRASTV_H
00175 #include <mi32/anyrastv.h>
00176 #endif
00177
00178 #ifndef INC_MI32_IMAGEDIMENSIONS_H
00179 #include <mi32/imagedimensions.h>
00180 #endif
00181
00182
00183 #ifndef GENERATING_DOXYGEN_OUTPUT
00184
00185 class COLOR_ARRAY;
00186 class STAT_UNIVARIATE;
00187 namespace SML {
00188 class CONTEXT;
00189 }
00190 namespace RVC {
00191 class RASTERHANDLE;
00192 struct RASTERLINKPARMS;
00193 struct RASTLINKDATAGEN;
00194 struct RASTINFO;
00195 }
00196 #endif // GENERATING_DOXYGEN_OUTPUT
00197
00198
00199 namespace RVC {
00200
00210 class RASTER : public RVC::IMAGE {
00211 public:
00212
00213 enum COMPONENT {
00214 COMPONENT_Default = 0,
00215 COMPONENT_Red,
00216 COMPONENT_Green,
00217 COMPONENT_Blue,
00218 COMPONENT_Real,
00219 COMPONENT_Imaginary,
00220 COMPONENT_Magnitude,
00221 COMPONENT_Phase,
00222 COMPONENT_Alpha,
00223 COMPONENT_Cyan,
00224 COMPONENT_Magenta,
00225 COMPONENT_Yellow,
00226 COMPONENT_Black
00227 };
00228
00229 enum COMPTYPE {
00230 COMPTYPE_None = 0,
00231 COMPTYPE_RLE = 1,
00232 COMPTYPE_JPEG = 2,
00233 COMPTYPE_Huffman = 3,
00234 COMPTYPE_DPCM = 4,
00235 COMPTYPE_JPEG2000 = 5,
00236 COMPTYPE_JP2 = COMPTYPE_JPEG2000,
00237 };
00238
00239 enum LINKTYPE {
00240 LINKTYPE_NoLink = 0,
00241 LINKTYPE_TIFF = 2,
00242 LINKTYPE_Generic = 3,
00243 LINKTYPE_MrSID = 4,
00244 LINKTYPE_ECW = 5,
00245 LINKTYPE_JP2 = 6,
00246 LINKTYPE_SocetSetDT = 7,
00247 LINKTYPE_PNG = 8,
00248 LINKTYPE_JPEG = 9,
00249 LINKTYPE_GDAL = 10,
00250 LINKTYPE_Multi = 2000
00251 };
00252
00253 enum STEPORDER {
00254 STEPORDER_FullSequential,
00255 STEPORDER_TileSequential,
00256 STEPORDER_TileRandom,
00257 STEPORDER_AnyRandom
00258 };
00259
00260 enum USAGE {
00261 USAGE_Default = 0,
00262 USAGE_HyspcBand,
00263 USAGE_HyspcClass,
00264 USAGE_HyspcAverage,
00265 USAGE_Pyramid,
00266 USAGE_PrinComp,
00267 USAGE_NullBand,
00268 USAGE_Opacity,
00269 USAGE_SurfaceElevation,
00270 USAGE_SurfaceError,
00271 USAGE_SurfaceRadius,
00272 USAGE_MultiRasterTile
00273 };
00274
00275 #ifndef GENERATING_DOXYGEN_OUTPUT
00276
00277 class GETOBJFILTER_ISSELECTABLE;
00278 class GETOBJFILTER_ISOVERLAPPING;
00279 #endif // GENERATING_DOXYGEN_OUTPUT
00280
00282 class IMAGESCALE {
00283 public:
00284
00286 IMAGESCALE (
00287 ) :
00288 m_LineScale(0.0),
00289 m_ColumnScale(0.0),
00290 m_DataScale(1.0),
00291 m_DataOffset(0.0)
00292 {}
00293
00296 double GetColumnScale (
00297 ) const {return (m_ColumnScale); }
00298
00301 double GetDataOffset (
00302 ) const {return (m_DataOffset);}
00303
00306 double GetDataScale (
00307 ) const {return (m_DataScale);}
00308
00311 double GetLineScale (
00312 ) const {return (m_LineScale);}
00313
00315 void SetColumnScale (
00316 double ColumnScale
00317 ) { m_ColumnScale = ColumnScale; }
00318
00320 void SetDataOffset (
00321 double DataOffset
00322 ) {m_DataOffset = DataOffset; }
00323
00325 void SetDataScale (
00326 double DataScale
00327 ) {
00328 m_DataScale = DataScale;
00329 if (m_DataScale == 0.0) m_DataScale = 1.0;
00330 }
00331
00333 void SetLineScale (
00334 double LineScale
00335 ) { m_LineScale = LineScale; }
00336
00337 private:
00338 #ifndef GENERATING_DOXYGEN_OUTPUT
00339
00340 double m_LineScale;
00341 double m_ColumnScale;
00342 double m_DataScale;
00343 double m_DataOffset;
00344 #endif // GENERATING_DOXYGEN_OUTPUT
00345 };
00346
00347 #ifndef GENERATING_DOXYGEN_OUTPUT
00348
00349 class LINKPARMS;
00350 class LINKPARMS_ECW;
00351 class LINKPARMS_GDAL;
00352 class LINKPARMS_GENERIC;
00353 class LINKPARMS_JP2;
00354 class LINKPARMS_JPEG;
00355 class LINKPARMS_MRSID;
00356 class LINKPARMS_PNG;
00357 class LINKPARMS_SOCETSETDT;
00358 class LINKPARMS_TIFF;
00359 #endif // GENERATING_DOXYGEN_OUTPUT
00360
00362 class MAKEPARMS {
00363 public:
00364
00366 MAKEPARMS (
00367 INT32 NumLines,
00368 INT32 NumColumns,
00369 IMAGE::CELLTYPE CellType
00370 ) :
00371 m_NumLines(NumLines),
00372 m_NumColumns(NumColumns),
00373 m_CellType(CellType),
00374 m_TileLines(0),
00375 m_TileColumns(0),
00376 m_Usage(USAGE_Default),
00377 m_Inverted(false),
00378 m_PackOrder(PACKORDER_MostSigBit),
00379 m_CompType(COMPTYPE_None),
00380 m_CompQuality(75),
00381 m_UsedBits(0),
00382 m_IsCompressed(false),
00383 m_IsLossyCompressed(false),
00384 m_Fill(false),
00385 m_NoEmbeddedPyramidTiers(false)
00386 { }
00387
00389 MAKEPARMS (
00390 const RASTER& Template,
00391 IMAGE::CELLTYPE CellType = CELLTYPE_Invalid
00392 ) :
00393 m_NumLines(Template.GetNumLines()),
00394 m_NumColumns(Template.GetNumColumns()),
00395 m_CellType((CellType!=CELLTYPE_Invalid)?CellType:Template.GetCellType()),
00396 m_TileLines(Template.GetNumTileLines()),
00397 m_TileColumns(Template.GetNumTileColumns()),
00398 m_Usage(Template.GetUsage()),
00399 m_Inverted(false),
00400 m_PackOrder(PACKORDER_MostSigBit),
00401 m_CompType(COMPTYPE_None),
00402 m_CompQuality(75),
00403 m_UsedBits(Template.GetNumUsedBits()),
00404 m_IsCompressed(false),
00405 m_IsLossyCompressed(false),
00406 m_Fill(false),
00407 m_NoEmbeddedPyramidTiers(false)
00408 {
00409 Template.GetImageScale(m_ImageScale);
00410 }
00411
00414 IMAGE::CELLTYPE GetCellType (
00415 ) const {return (m_CellType);}
00416
00419 UINT16 GetCompressionQuality (
00420 ) const {return (m_CompQuality);}
00421
00424 COMPTYPE GetCompressionType (
00425 ) const {return (m_CompType);}
00426
00429 IMAGE::DATATYPE GetDataType (
00430 ) const {return (IMAGE::GetDataTypeFromCellType(m_CellType));}
00431
00434 INT32 GetDftTileSize (
00435 ) const;
00436
00439 const IMAGESCALE& GetImageScale (
00440 ) const {return (m_ImageScale);}
00441
00443 bool GetInitialValue (
00444 ANYRASTVALUE& value
00445 ) const {
00446 value = m_InitValue;
00447 return (m_Fill);
00448 }
00449
00452 UINT16 GetNumBits (
00453 ) const {return (IMAGE::GetNumBitsFromCellType(m_CellType));}
00454
00457 INT32 GetNumColumns (
00458 ) const {return (m_NumColumns);}
00459
00462 INT32 GetNumLines (
00463 ) const {return (m_NumLines);}
00464
00468 UINT16 GetNumUsedBits (
00469 ) const { return (m_UsedBits); }
00470
00472 void GetTileSize (
00473 INT32& TileLines,
00474 INT32& TileColumns
00475 ) const { TileLines = m_TileLines; TileColumns = m_TileColumns; }
00476
00478 void GetValueMinMax (
00479 ANYRASTVALUE& min,
00480 ANYRASTVALUE& max
00481 ) const;
00482
00485 bool IsLossyCompressed (
00486 ) const {return (m_IsLossyCompressed);}
00487
00490 bool IsValidCompression (
00491 COMPTYPE CompType
00492 ) const;
00493
00495 void SetCellType (
00496 CELLTYPE CellType
00497 ) {m_CellType = CellType;}
00498
00500 ERRVALUE SetCompression (
00501 COMPTYPE CompType,
00502 UINT16 CompQuality,
00503 bool FixCellType = false
00504 );
00505
00509 void SetIncludeEmbeddedPyramidTiers (
00510 bool IncludeTiers
00511 ) { m_NoEmbeddedPyramidTiers = !IncludeTiers; }
00512
00514 void SetImageScale (
00515 const IMAGESCALE& ImageScale
00516 ) {m_ImageScale = ImageScale; }
00517
00519 void SetInitialValue (
00520 const ANYRASTVALUE& value
00521 ) { m_InitValue = value; m_Fill = true; }
00522
00524 void SetInverted (
00525 ) {m_Inverted = true;}
00526
00528 void SetNumColumns (
00529 INT32 NumColumns
00530 ) {m_NumColumns = NumColumns;}
00531
00533 void SetNumLines (
00534 INT32 NumLines
00535 ) {m_NumLines = NumLines;}
00536
00540 void SetNumUsedBits (
00541 const RASTER& SrcRastObj
00542 );
00543
00547 void SetNumUsedBits (
00548 UINT16 UsedBits
00549 ) { m_UsedBits = UsedBits; }
00550
00552 void SetPackOrder (
00553 PACKORDER PackOrder
00554 ) {m_PackOrder = PackOrder;}
00555
00557 void SetTileSize (
00558 INT32 TileLines,
00559 INT32 TileColumns
00560 ) { m_TileLines = TileLines; m_TileColumns = TileColumns; }
00561
00563 void SetUsage (
00564 USAGE usage
00565 ) { m_Usage = usage; }
00566
00567 private:
00568 #ifndef GENERATING_DOXYGEN_OUTPUT
00569
00570 INT32 m_NumLines;
00571 INT32 m_NumColumns;
00572 CELLTYPE m_CellType;
00573 PACKORDER m_PackOrder;
00574 USAGE m_Usage;
00575 INT32 m_TileLines;
00576 INT32 m_TileColumns;
00577 COMPTYPE m_CompType;
00578 UINT16 m_CompQuality;
00579 UINT16 m_UsedBits;
00580 bool m_Inverted;
00581 bool m_IsCompressed;
00582 bool m_IsLossyCompressed;
00583 bool m_Fill;
00584 bool m_NoEmbeddedPyramidTiers;
00585 ANYRASTVALUE m_InitValue;
00586 IMAGESCALE m_ImageScale;
00587
00588 friend class RASTER;
00589 #endif // GENERATING_DOXYGEN_OUTPUT
00590 };
00591
00593 static TEXTID GetComponentTextID (
00594 COMPONENT component
00595 );
00596
00598 RASTER ();
00599
00601 RASTER (
00602 const RVC::RASTER& rhs
00603 );
00604
00606 virtual ~RASTER ();
00607
00609 RVC::RASTER& operator= (
00610 const RVC::RASTER& rhs
00611 );
00612
00613 static ERRVALUE AutoLinkJP2 (
00614 RVC::OBJECT& ParentObj,
00615 const FILEPATH& LinkFile,
00616 RVC::GEOSPATIAL::MAKELINKFLAGS LinkFlags
00617 );
00618
00619 static ERRVALUE AutoLinkTIFF (
00620 RVC::OBJECT& ParentObj,
00621 const FILEPATH& LinkFile,
00622 RVC::GEOSPATIAL::MAKELINKFLAGS LinkFlags
00623 );
00624
00627 static bool ComputeNextPyramidSize (
00628 INT32& NumColumns,
00629 INT32& NumLines,
00630 bool IsFirst
00631 );
00632
00634 ERRVALUE ComputeUnivariateStatistics (
00635 STAT_UNIVARIATE& StatUnivariate,
00636 COMPONENT Component = COMPONENT_Default
00637 );
00638
00641 ERRVALUE CopyAverageTo (
00642 RASTER& DestRaster,
00643 INT32 ColumnSample,
00644 INT32 LineSample,
00645 COLOR_ARRAY* ColorMap = 0
00646 );
00647
00654 ERRVALUE CopyRasterTo (
00655 RVC::OBJITEM& ObjItemTarget,
00656 const MAKEPARMS& MakeParm,
00657 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00658 );
00659
00663 ERRVALUE CopyRasterTo (
00664 RASTER& TargetRaster
00665 );
00666
00669 ERRVALUE CopySampledTo (
00670 RASTER& DestRaster,
00671 INT32 ColumnSample,
00672 INT32 LineSample
00673 );
00674
00681 ERRVALUE CopySampledTo (
00682 RASTER& DestRaster,
00683 INT32 ColumnSample,
00684 INT32 LineSample,
00685 const LRECT2D& ExtractRect,
00686 LRECT2D* DestRect = 0
00687 );
00688
00690 ERRVALUE CreateSMLContext (
00691 SML::CONTEXT **pcontext
00692 );
00693
00695 ERRVALUE ExtractTo (
00696 RASTER& TgtRaster,
00697 const LRECT2D& SrcRect,
00698 LRECT2D* TgtRect = 0
00699 );
00700
00702 ERRVALUE GetComponents (
00703 SIMPLE_ARRAY<COMPONENT>& Components
00704 ) const;
00705
00708 COMPTYPE GetCompressionType (
00709 ) const {return (m_MakeParms.m_CompType);}
00710
00713 IMAGE::DATATYPE GetDataType (
00714 ) const {return (m_MakeParms.GetDataType());}
00715
00718 ERRVALUE GetEmbeddedPyramidList (
00719 SIMPLE_ARRAY<INT32>& samplerates
00720 );
00721
00724 const MAKEPARMS& GetMakeParms (
00725 ) const {return (m_MakeParms);}
00726
00728 ERRVALUE GetImageScale (
00729 IMAGESCALE& scale
00730 ) const;
00731
00734 LINKTYPE GetLinkType (
00735 ) const {return (m_LinkType);}
00736
00738 ERRVALUE GetNullValue (
00739 NULLVALUE& NullValue
00740 ) const;
00741
00744 UINT16 GetNumBits (
00745 ) const {return (m_MakeParms.GetNumBits());}
00746
00749 INT32 GetNumTileColumns (
00750 ) const {return (m_MakeParms.m_TileColumns);}
00751
00754 INT32 GetNumTileLines (
00755 ) const {return (m_MakeParms.m_TileLines);}
00756
00760 UINT16 GetNumUsedBits (
00761 ) const { return (m_MakeParms.m_UsedBits); }
00762
00765 INT32 GetNumXTiles (
00766 ) const {return (m_XTiles);}
00767
00770 INT32 GetNumYTiles (
00771 ) const {return (m_YTiles);}
00772
00775 PACKORDER GetPackOrder (
00776 ) const {return (m_MakeParms.m_PackOrder);}
00777
00780 ERRVALUE GetPyramidInfo (
00781 SIMPLE_ARRAY<IMAGEDIMENSIONS>& TierInfo,
00782 RVC::OBJITEMLIST& PyramidList
00783 ) const;
00784
00787 static ERRVALUE GetPyramidInfo (
00788 const OBJITEM& RastObjItem,
00789 SIMPLE_ARRAY<IMAGEDIMENSIONS>& TierInfo,
00790 RVC::OBJITEMLIST& PyramidList,
00791 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00792 );
00793
00796 ERRVALUE GetPyramidList (
00797 SIMPLE_ARRAY<INT32>& SampleList,
00798 RVC::OBJITEMLIST& PyramidList
00799 ) const;
00800
00803 static ERRVALUE GetPyramidList (
00804 const OBJITEM& RastObjItem,
00805 SIMPLE_ARRAY<INT32>& SampleList,
00806 RVC::OBJITEMLIST& PyramidList,
00807 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00808 );
00809
00812 INT32 GetTileSizeBytes (
00813 ) const {return (m_TileSize);}
00814
00817 USAGE GetUsage (
00818 ) const {return (m_MakeParms.m_Usage);}
00819
00821 bool HasNullValue (
00822 ) const;
00823
00826 bool IsCompressed (
00827 ) const {return (m_MakeParms.m_IsCompressed);}
00828
00831 bool IsLossyCompressed (
00832 ) const {return (m_MakeParms.m_IsLossyCompressed);}
00833
00836 bool IsInverted (
00837 ) const {return (m_MakeParms.m_Inverted);}
00838
00840 ERRVALUE Link (
00841 const RVC::OBJECT& parent,
00842 const RVC::DESCRIPTOR& Descriptor,
00843 const LINKPARMS& LinkParms,
00844 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00845 );
00846
00848 ERRVALUE Link (
00849 const RVC::OBJECT& parent,
00850 const RVC::DESCRIPTOR& Descriptor,
00851 const LINKPARMS& LinkParms,
00852 USAGE Usage,
00853 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00854 );
00855
00857 ERRVALUE Make (
00858 const RVC::OBJECT& parent,
00859 const RVC::DESCRIPTOR& Descriptor,
00860 MAKEPARMS& MakeParms,
00861 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00862 );
00863
00865 ERRVALUE Make (
00866 RVC::OBJITEM& ObjItem,
00867 MAKEPARMS& MakeParms,
00868 #ifdef RVC_CREDENTIALS_MANDATORY
00869 const char* Source,
00870 #else
00871 const char* Source = 0,
00872 #endif
00873 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00874 );
00875
00878 ERRVALUE MakePyramidSet (
00879 #ifdef RVC_CREDENTIALS_MANDATORY
00880 IMAGE::PYRAMID flags,
00881 #else
00882 IMAGE::PYRAMID flags = IMAGE::PYRAMID_Default,
00883 #endif
00884 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00885 );
00886
00887 ERRVALUE MakePyramidSet (
00888 #ifdef RVC_CREDENTIALS_MANDATORY
00889 RASTER::COMPTYPE comptype,
00890 UINT16 compquality,
00891 IMAGE::PYRAMID flags,
00892 #else
00893 RASTER::COMPTYPE comptype,
00894 UINT16 compquality,
00895 IMAGE::PYRAMID flags = IMAGE::PYRAMID_Default,
00896 #endif
00897 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00898 );
00899
00902 float QueryStepOrder (
00903 STEPORDER steporder
00904 );
00905
00907 ERRVALUE Read (
00908 INT32 Line,
00909 INT32 StartColumn,
00910 void *data,
00911 INT32 Length = 1,
00912 CONVMODE Convert = CONVMODE_None,
00913 COMPONENT Component = COMPONENT_Default
00914 ) const;
00915
00917 ERRVALUE Read (
00918 INT32 Line,
00919 INT32 StartColumn,
00920 INT8 *data,
00921 INT32 Length = 1,
00922 COMPONENT Component = COMPONENT_Default
00923 ) const { return (Read(Line, StartColumn, data, Length, CONVMODE_INT8, Component)); }
00924
00926 ERRVALUE Read (
00927 INT32 Line,
00928 INT32 StartColumn,
00929 UINT8 *data,
00930 INT32 Length = 1,
00931 COMPONENT Component = COMPONENT_Default
00932 ) const { return (Read(Line, StartColumn, data, Length, CONVMODE_INT8, Component)); }
00933
00935 ERRVALUE Read (
00936 INT32 Line,
00937 INT32 StartColumn,
00938 INT16 *data,
00939 INT32 Length = 1,
00940 COMPONENT Component = COMPONENT_Default
00941 ) const { return (Read(Line, StartColumn, data, Length, CONVMODE_INT16, Component)); }
00942
00944 ERRVALUE Read (
00945 INT32 Line,
00946 INT32 StartColumn,
00947 UINT16 *data,
00948 INT32 Length = 1,
00949 COMPONENT Component = COMPONENT_Default
00950 ) const { return (Read(Line, StartColumn, data, Length, CONVMODE_INT16, Component)); }
00951
00953 ERRVALUE Read (
00954 INT32 Line,
00955 INT32 StartColumn,
00956 INT32 *data,
00957 INT32 Length = 1,
00958 COMPONENT Component = COMPONENT_Default
00959 ) const { return (Read(Line, StartColumn, data, Length, CONVMODE_INT32, Component)); }
00960
00962 ERRVALUE Read (
00963 INT32 Line,
00964 INT32 StartColumn,
00965 UINT32 *data,
00966 INT32 Length = 1,
00967 COMPONENT Component = COMPONENT_Default
00968 ) const { return (Read(Line, StartColumn, data, Length, CONVMODE_INT32, Component)); }
00969
00971 ERRVALUE Read (
00972 INT32 Line,
00973 INT32 StartColumn,
00974 float *data,
00975 INT32 Length = 1,
00976 COMPONENT Component = COMPONENT_Default
00977 ) const { return (Read(Line, StartColumn, data, Length, CONVMODE_Float, Component)); }
00978
00980 ERRVALUE Read (
00981 INT32 Line,
00982 INT32 StartColumn,
00983 double *data,
00984 INT32 Length = 1,
00985 COMPONENT Component = COMPONENT_Default
00986 ) const { return (Read(Line, StartColumn, data, Length, CONVMODE_Double, Component)); }
00987
00989 ERRVALUE ReadColumn (
00990 INT32 Line,
00991 INT32 StartColumn,
00992 void *data,
00993 INT32 Length = 1,
00994 CONVMODE Convert = CONVMODE_None,
00995 COMPONENT Component = COMPONENT_Default
00996 ) const;
00997
00999 ERRVALUE ReadColumn (
01000 INT32 Line,
01001 INT32 StartColumn,
01002 INT8 *data,
01003 INT32 Length = 1,
01004 COMPONENT Component = COMPONENT_Default
01005 ) const { return (ReadColumn(Line, StartColumn, data, Length, CONVMODE_INT8, Component)); }
01006
01008 ERRVALUE ReadColumn (
01009 INT32 Line,
01010 INT32 StartColumn,
01011 UINT8 *data,
01012 INT32 Length = 1,
01013 COMPONENT Component = COMPONENT_Default
01014 ) const { return (ReadColumn(Line, StartColumn, data, Length, CONVMODE_INT8, Component)); }
01015
01017 ERRVALUE ReadColumn (
01018 INT32 Line,
01019 INT32 StartColumn,
01020 INT16 *data,
01021 INT32 Length = 1,
01022 COMPONENT Component = COMPONENT_Default
01023 ) const { return (ReadColumn(Line, StartColumn, data, Length, CONVMODE_INT16, Component)); }
01024
01026 ERRVALUE ReadColumn (
01027 INT32 Line,
01028 INT32 StartColumn,
01029 UINT16 *data,
01030 INT32 Length = 1,
01031 COMPONENT Component = COMPONENT_Default
01032 ) const { return (ReadColumn(Line, StartColumn, data, Length, CONVMODE_INT16, Component)); }
01033
01035 ERRVALUE ReadColumn (
01036 INT32 Line,
01037 INT32 StartColumn,
01038 INT32 *data,
01039 INT32 Length = 1,
01040 COMPONENT Component = COMPONENT_Default
01041 ) const { return (ReadColumn(Line, StartColumn, data, Length, CONVMODE_INT32, Component)); }
01042
01044 ERRVALUE ReadColumn (
01045 INT32 Line,
01046 INT32 StartColumn,
01047 UINT32 *data,
01048 INT32 Length = 1,
01049 COMPONENT Component = COMPONENT_Default
01050 ) const { return (ReadColumn(Line, StartColumn, data, Length, CONVMODE_INT32, Component)); }
01051
01053 ERRVALUE ReadColumn (
01054 INT32 Line,
01055 INT32 StartColumn,
01056 float *data,
01057 INT32 Length = 1,
01058 COMPONENT Component = COMPONENT_Default
01059 ) const { return (ReadColumn(Line, StartColumn, data, Length, CONVMODE_Float, Component)); }
01060
01062 ERRVALUE ReadColumn (
01063 INT32 Line,
01064 INT32 StartColumn,
01065 double *data,
01066 INT32 Length = 1,
01067 COMPONENT Component = COMPONENT_Default
01068 ) const { return (ReadColumn(Line, StartColumn, data, Length, CONVMODE_Double, Component)); }
01069
01071 ERRVALUE SetImageScale (
01072 const IMAGESCALE& scale
01073 );
01074
01076 ERRVALUE SetNullValue (
01077 const NULLVALUE& NullValue,
01078 bool NullUsed = true
01079 );
01080
01082 ERRVALUE Write (
01083 INT32 Line,
01084 INT32 StartColumn,
01085 const void *data,
01086 INT32 Length = 1,
01087 CONVMODE Convert = CONVMODE_None,
01088 COMPONENT Component = COMPONENT_Default
01089 );
01090
01092 ERRVALUE Write (
01093 INT32 Line,
01094 INT32 StartColumn,
01095 const INT8 *data,
01096 INT32 Length = 1,
01097 COMPONENT Component = COMPONENT_Default
01098 ) { return (Write(Line, StartColumn, data, Length, CONVMODE_INT8, Component)); }
01099
01101 ERRVALUE Write (
01102 INT32 Line,
01103 INT32 StartColumn,
01104 const UINT8 *data,
01105 INT32 Length = 1,
01106 COMPONENT Component = COMPONENT_Default
01107 ) { return (Write(Line, StartColumn, data, Length, CONVMODE_INT8, Component)); }
01108
01110 ERRVALUE Write (
01111 INT32 Line,
01112 INT32 StartColumn,
01113 const INT16 *data,
01114 INT32 Length = 1,
01115 COMPONENT Component = COMPONENT_Default
01116 ) { return (Write(Line, StartColumn, data, Length, CONVMODE_INT16, Component)); }
01117
01119 ERRVALUE Write (
01120 INT32 Line,
01121 INT32 StartColumn,
01122 const UINT16 *data,
01123 INT32 Length = 1,
01124 COMPONENT Component = COMPONENT_Default
01125 ) { return (Write(Line, StartColumn, data, Length, CONVMODE_INT16, Component)); }
01126
01128 ERRVALUE Write (
01129 INT32 Line,
01130 INT32 StartColumn,
01131 const INT32 *data,
01132 INT32 Length = 1,
01133 COMPONENT Component = COMPONENT_Default
01134 ) { return (Write(Line, StartColumn, data, Length, CONVMODE_INT32, Component)); }
01135
01137 ERRVALUE Write (
01138 INT32 Line,
01139 INT32 StartColumn,
01140 const UINT32 *data,
01141 INT32 Length = 1,
01142 COMPONENT Component = COMPONENT_Default
01143 ) { return (Write(Line, StartColumn, data, Length, CONVMODE_INT32, Component)); }
01144
01146 ERRVALUE Write (
01147 INT32 Line,
01148 INT32 StartColumn,
01149 const float *data,
01150 INT32 Length = 1,
01151 COMPONENT Component = COMPONENT_Default
01152 ) { return (Write(Line, StartColumn, data, Length, CONVMODE_Float, Component)); }
01153
01155 ERRVALUE Write (
01156 INT32 Line,
01157 INT32 StartColumn,
01158 const double *data,
01159 INT32 Length = 1,
01160 COMPONENT Component = COMPONENT_Default
01161 ) { return (Write(Line, StartColumn, data, Length, CONVMODE_Double, Component)); }
01162
01163 protected:
01164 void AssignValues (
01165 const RASTINFO& rinfo
01166 );
01167
01168 bool IsRasterHandleValid (
01169 ) { return m_RasterHandle != NULL; }
01170
01171 void SetRasterHandle (
01172 RASTERHANDLE* RastHandle
01173 );
01174
01175 RASTERHANDLE& GetRasterHandle (
01176 ) { return *m_RasterHandle; }
01177
01178 private:
01179 #ifndef GENERATING_DOXYGEN_OUTPUT
01180
01182 virtual ERRVALUE v_CloseObject ();
01183 virtual RVC::OBJTYPE v_GetDftObjectType () const;
01184 virtual bool v_IsObjectOpen () const;
01185 virtual ERRVALUE v_OpenObject (OPENMODE OpenMode, MDLGPARENT parent, const CREDENTIALS* Credentials);
01186
01188 virtual void v_GetExtents (DRECT3D &extents) const;
01189 virtual void v_GetScale (double& xscale, double& yscale) const;
01190 virtual double v_GetZScale () const;
01191 virtual double v_GetZOffset () const;
01192 virtual bool v_HasCapability (int Capability) const;
01193 virtual void v_SetScale (double xscale, double yscale);
01194 virtual void v_SetZOffset (double zoffset);
01195 virtual void v_SetZScale (double zscale);
01196
01198 virtual ERRVALUE v_GetBandParms (INT32 BandNum, BANDPARMS& BandParms) const;
01199 virtual CELLTYPE v_GetCellType () const;
01200 virtual double v_GetColumnScale () const;
01201 virtual double v_GetLineScale () const;
01202 virtual ERRVALUE v_GetNullValue (INT32 BandNum, NULLVALUE& NullValue) const;
01203 virtual INT32 v_GetNumBands () const;
01204 virtual INT32 v_GetNumColumns () const { return (m_MakeParms.GetNumColumns()); }
01205 virtual INT32 v_GetNumLines () const { return (m_MakeParms.GetNumLines()); }
01206 virtual bool v_HasNullValue (INT32 BandNum) const;
01207 virtual ERRVALUE v_ReadBand (INT32 Band, INT32 Line, INT32 StartColumn, void *data, INT32 Length, CONVMODE Convert) const;
01208 virtual ERRVALUE v_ReadColumnBand (INT32 Band, INT32 Line, INT32 StartColumn, void *data, INT32 Length, CONVMODE Convert) const;
01209 virtual ERRVALUE v_SetCacheRect (const LRECT2D& Rect);
01210 virtual ERRVALUE v_SetCacheSize (INT32 NumTiles);
01211 virtual ERRVALUE v_SetCacheSize (CACHEMODE CacheFlags);
01212 virtual ERRVALUE v_SetNullValue (INT32 BandNum, const NULLVALUE* NullValue);
01213 virtual ERRVALUE v_WriteBand (INT32 Band, INT32 Line, INT32 StartColumn, const void *data, INT32 Length, CONVMODE Convert);
01214
01215 int ComputeNumPyramidLevels (PYRAMID flags);
01216
01217 PYRAMID ValidatePyramidFlags (PYRAMID flags) const;
01218
01220 RASTERHANDLE* m_RasterHandle;
01221
01223 MAKEPARMS m_MakeParms;
01224 LINKTYPE m_LinkType;
01225 INT32 m_XTiles;
01226 INT32 m_YTiles;
01227 INT32 m_TileSize;
01228
01229 friend class MAKEPARMS;
01230 #endif // GENERATING_DOXYGEN_OUTPUT
01231 };
01232
01238 class RASTER::GETOBJFILTER_ISSELECTABLE : public GETOBJFILTER {
01239 public:
01240
01242 GETOBJFILTER_ISSELECTABLE (
01243 RVC::IMAGE::CELLTYPE CellTypes,
01244 bool DenyTypes = false,
01245 bool NeedSameSize = false
01246 );
01247
01248 virtual ~GETOBJFILTER_ISSELECTABLE () {}
01249
01250 protected:
01251
01252 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position = -1);
01253 virtual bool v_IsValidList (const RVC::OBJITEMLIST& objlist);
01254
01255 private:
01256 #ifndef GENERATING_DOXYGEN_OUTPUT
01257 IMAGE::CELLTYPE m_CellTypes;
01258 bool m_NeedSameSize;
01259
01260 #endif // GENERATING_DOXYGEN_OUTPUT
01261 };
01262
01263
01267 class RASTER::GETOBJFILTER_ISOVERLAPPING : public GETOBJFILTER {
01268 public:
01269
01271 GETOBJFILTER_ISOVERLAPPING (
01272 const RVC::OBJITEM& SrcObjItem,
01273 RVC::IMAGE::CELLTYPE CellTypes,
01274 bool DenyTypes = false,
01275 bool NeedSameSize = false
01276 );
01277
01278 virtual ~GETOBJFILTER_ISOVERLAPPING () {}
01279
01280 protected:
01281
01282 virtual bool v_IsSelectable (const RVC::OBJITEM& objitem, int position = -1);
01283 virtual bool v_IsValidList (const RVC::OBJITEMLIST& objlist);
01284
01285 private:
01286 #ifndef GENERATING_DOXYGEN_OUTPUT
01287 RASTER::GETOBJFILTER_ISSELECTABLE m_IsSelectable;
01288 GEOSPATIAL::GETOBJFILTER_ISOVERLAPPING m_IsOverlapping;
01289 #endif // GENERATING_DOXYGEN_OUTPUT
01290 };
01291
01292
01294 class RASTER::LINKPARMS {
01295 public:
01296 virtual ~LINKPARMS (
01297 );
01298
01299 RASTER::LINKTYPE GetLinkType() const;
01300
01301 protected:
01302
01304 LINKPARMS (
01305 const FILEPATH& filename,
01306 RASTER::LINKTYPE LinkType,
01307 GEOSPATIAL::MAKELINKFLAGS flags
01308 );
01309
01310 RASTLINKDATAGEN& GetGenericLinkData (
01311 );
01312
01313 RASTINFO& GetRasterHeader (
01314 );
01315
01316 void SetBandList (
01317 const INT32* BandList,
01318 INT32 NumBands
01319 );
01320
01321 void SetComponent (
01322 INT32 component
01323 );
01324
01325 void SetGenericLinkData (
01326 const RASTLINKDATAGEN& GenLinkData
01327 );
01328
01329 void SetPyramidLink (
01330 );
01331
01332 void SetRasterHeader (
01333 const RASTINFO& RastInfo
01334 );
01335
01336 void SetSample (
01337 INT32 Sample
01338 );
01339
01340 private:
01341 #ifndef GENERATING_DOXYGEN_OUTPUT
01342 RASTERLINKPARMS* m_LinkParms;
01343
01344 friend class RASTER;
01345 friend class MULTIRASTER;
01346 #endif // GENERATING_DOXYGEN_OUTPUT
01347
01348 };
01349
01350
01351 class RASTER::LINKPARMS_ECW : public RASTER::LINKPARMS {
01352 public:
01353
01358 LINKPARMS_ECW (
01359 const FILEPATH& filename,
01360 const INT32* BandList,
01361 INT32 Sample = 1,
01362 GEOSPATIAL::MAKELINKFLAGS flags = GEOSPATIAL::MAKELINKFLAG_None
01363 ) :
01364 LINKPARMS(filename, RASTER::LINKTYPE_ECW, flags)
01365 {
01366 if (BandList != 0) SetBandList(BandList, 3);
01367 SetSample(Sample);
01368 }
01369 };
01370
01371
01372 class RASTER::LINKPARMS_GDAL : public RASTER::LINKPARMS {
01373 public:
01374
01376 LINKPARMS_GDAL (
01377 const FILEPATH& filename,
01378 INT32 component = 0,
01379 GEOSPATIAL::MAKELINKFLAGS flags = GEOSPATIAL::MAKELINKFLAG_None
01380 ) :
01381 LINKPARMS(filename, RASTER::LINKTYPE_GDAL, flags)
01382 {
01383 SetComponent(component);
01384 }
01385 };
01386
01387
01388 class RASTER::LINKPARMS_GENERIC : public RASTER::LINKPARMS {
01389 public:
01390 enum LINKORDER {
01391 LINKORDER_HiLo,
01392 LINKORDER_LoHi
01393 };
01394
01395 enum INTERLEAVE_TYPE {
01396 INTTYPE_Line,
01397 INTTYPE_Band,
01398 INTTYPE_Pixel
01399 };
01400
01402 LINKPARMS_GENERIC (
01403 const FILEPATH& filename,
01404 RVC::IMAGE::CELLTYPE celltype,
01405 INT32 numlins,
01406 INT32 numcols,
01407 GEOSPATIAL::MAKELINKFLAGS flags = GEOSPATIAL::MAKELINKFLAG_None
01408 );
01409
01411 void SetBandTrailerBytes (
01412 INT32 bandtbytes
01413 );
01414
01416 void SetByteOrder (
01417 LINKORDER order
01418 );
01419
01421 void SetImageScale (
01422 const RASTER::IMAGESCALE& scale
01423 );
01424
01426 void SetCompressionType (
01427 RVC::RASTER::COMPTYPE comptype
01428 );
01429
01431 void SetHeaderBytes (
01432 INT64 headerbytes
01433 );
01434
01436 void SetInterleaveAdd (
01437 INT16 intadd
01438 );
01439
01441 void SetInterleaveTrailerBytes (
01442 INT32 intertbytes
01443 );
01444
01446 void SetInterleaveFactor (
01447 INT16 intfact
01448 );
01449
01451 void SetInterleaveType (
01452 INTERLEAVE_TYPE inttype
01453 );
01454
01456 void SetInverted (
01457 bool inverted
01458 );
01459
01461 void SetLineTrailerBytes (
01462 INT32 linetbytes
01463 );
01464
01466 void SetNullValue (
01467 const IMAGE::NULLVALUE& nullval
01468 );
01469
01471 void SetNumBands (
01472 INT32 numbands
01473 );
01474
01476 void SetTileColumns (
01477 INT32 tilecols
01478 );
01479
01481 void SetTileLines (
01482 INT32 tilelins
01483 );
01484 };
01485
01486
01487 class RASTER::LINKPARMS_JP2 : public RASTER::LINKPARMS {
01488 public:
01489
01491 LINKPARMS_JP2 (
01492 const FILEPATH& filename,
01493 INT32 component = 0,
01494 GEOSPATIAL::MAKELINKFLAGS flags = GEOSPATIAL::MAKELINKFLAG_None
01495 ) :
01496 LINKPARMS(filename, RASTER::LINKTYPE_JP2, flags)
01497 {
01498 SetComponent(component);
01499 }
01500
01501 void SetPyramid (
01502 ) { SetPyramidLink(); }
01503 };
01504
01505
01506 class RASTER::LINKPARMS_JPEG : public RASTER::LINKPARMS {
01507 public:
01508
01510 LINKPARMS_JPEG (
01511 const FILEPATH& filename,
01512 GEOSPATIAL::MAKELINKFLAGS flags = GEOSPATIAL::MAKELINKFLAG_None
01513 ) :
01514 LINKPARMS(filename, RASTER::LINKTYPE_JPEG, flags)
01515 {}
01516 };
01517
01518
01519 class RASTER::LINKPARMS_MRSID : public RASTER::LINKPARMS {
01520 public:
01521
01523 LINKPARMS_MRSID (
01524 const FILEPATH& filename,
01525 GEOSPATIAL::MAKELINKFLAGS flags = GEOSPATIAL::MAKELINKFLAG_None
01526 ) :
01527 LINKPARMS(filename, RASTER::LINKTYPE_MrSID, flags)
01528 {}
01529 };
01530
01531
01532 class RASTER::LINKPARMS_PNG : public RASTER::LINKPARMS {
01533 public:
01534
01536 LINKPARMS_PNG (
01537 const FILEPATH& filename,
01538 GEOSPATIAL::MAKELINKFLAGS flags = GEOSPATIAL::MAKELINKFLAG_None
01539 ) :
01540 LINKPARMS(filename, RASTER::LINKTYPE_PNG, flags)
01541 {}
01542 };
01543
01544
01545 class RASTER::LINKPARMS_SOCETSETDT : public RASTER::LINKPARMS {
01546 public:
01547
01549 LINKPARMS_SOCETSETDT (
01550 const FILEPATH& filename,
01551 GEOSPATIAL::MAKELINKFLAGS flags = GEOSPATIAL::MAKELINKFLAG_None
01552 ) :
01553 LINKPARMS(filename, RASTER::LINKTYPE_SocetSetDT, flags)
01554 {}
01555 };
01556
01557
01558 class RASTER::LINKPARMS_TIFF : public RASTER::LINKPARMS {
01559 public:
01560
01562 LINKPARMS_TIFF (
01563 const FILEPATH& filename,
01564 INT32 ImageIndex,
01565 INT32 component = 0,
01566 GEOSPATIAL::MAKELINKFLAGS flags = GEOSPATIAL::MAKELINKFLAG_None
01567 ) :
01568 LINKPARMS(filename, RASTER::LINKTYPE_TIFF, flags)
01569 {
01570 SetComponent(component);
01571 SetSample(ImageIndex);
01572 }
01573 };
01574
01575 }
01576
01577 #endif