00001
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248 #ifndef INC_RVC_IMAGE_H
00249 #define INC_RVC_IMAGE_H
00250
00251 #ifndef INC_RVC_GEOSPATL_H
00252 #include <rvc/geospatl.h>
00253 #endif
00254
00255 #ifndef INC_MI32_COLORSPC_H
00256 #include <mi32/colorspc.h>
00257 #endif
00258
00259 #ifndef INC_MI32_RANGE_H
00260 #include <mi32/range.h>
00261 #endif
00262
00263 #ifndef INC_MI32_NUMTYPE_H
00264 #include <mi32/numtype.h>
00265 #endif
00266
00267 #ifndef GENERATING_DOXYGEN_OUTPUT
00268
00269 union ANYRASTVALUE;
00270 struct DCOMPLEXMP;
00271 struct DCOMPLEXRI;
00272 struct FCOMPLEXMP;
00273 struct FCOMPLEXRI;
00274 #endif
00275
00276 namespace RVC {
00277
00278 #ifndef GENERATING_DOXYGEN_OUTPUT
00279
00280 struct ANYCALLBACKSTRUCT;
00281 #endif
00282
00283 class IMAGE : public RVC::GEOSPATIAL {
00284 public:
00285
00286 enum CACHEMODE {
00287 CACHEMODE_Default = 0,
00288 CACHEMODE_DiagonalRow,
00289 CACHEMODE_TileRow
00290 };
00291
00292 enum CAPABILITY {
00293 CAPABILITY_None = 0,
00294 CAPABILITY_SequentialReadOptimal = 1024
00295 };
00296
00298 enum CONVMODE {
00299 CONVMODE_None = 0,
00300 CONVMODE_ByteSpread,
00301 CONVMODE_INT8,
00302 CONVMODE_INT16,
00303 CONVMODE_INT32,
00304 CONVMODE_Float,
00305 CONVMODE_Double,
00306 CONVMODE_RGB,
00307 CONVMODE_BGR,
00308 CONVMODE_RGBSpread,
00309 CONVMODE_BGRSpread,
00310 CONVMODE_ComplexRIFloat,
00311 CONVMODE_ComplexMPFloat,
00312 CONVMODE_ComplexRIDouble,
00313 CONVMODE_ComplexMPDouble
00314 };
00315
00317 enum DATATYPE {
00318 DATATYPE_Invalid = 0,
00319 DATATYPE_Unsigned,
00320 DATATYPE_Signed,
00321 DATATYPE_Float,
00322 DATATYPE_BGR,
00323 DATATYPE_RGB,
00324 DATATYPE_BGR16,
00325 DATATYPE_RGB16,
00326 DATATYPE_ComplexRI,
00327 DATATYPE_ComplexMP,
00328 DATATYPE_RGBA,
00329 DATATYPE_ARGB,
00330 DATATYPE_CMYK,
00331 DATATYPE_KCMY
00332 };
00333
00335 enum CELLTYPE {
00336 CELLTYPE_Invalid = 0x00000000,
00337 CELLTYPE_Binary = 0x00000001,
00338 CELLTYPE_Unsigned_4 = 0x00000002,
00339 CELLTYPE_Unsigned_8 = 0x00000004,
00340 CELLTYPE_Unsigned_32 = 0x00000008,
00341 CELLTYPE_Unsigned_16 = 0x00000010,
00342 CELLTYPE_Unsigned_64 = 0x00000020,
00343 CELLTYPE_Signed_8 = 0x00000040,
00344 CELLTYPE_Signed_16 = 0x00000080,
00345 CELLTYPE_Signed_32 = 0x00000100,
00346 CELLTYPE_Signed_64 = 0x00000200,
00347 CELLTYPE_Float_32 = 0x00000400,
00348 CELLTYPE_Float_64 = 0x00000800,
00349 CELLTYPE_ComplexRI_64 = 0x00001000,
00350 CELLTYPE_ComplexMP_64 = 0x00002000,
00351 CELLTYPE_ComplexRI_128 = 0x00004000,
00352 CELLTYPE_ComplexMP_128 = 0x00008000,
00353 CELLTYPE_X1R5G5B5_16 = 0x00010000,
00354 CELLTYPE_X1B5G5R5_16 = 0x00020000,
00355 CELLTYPE_RedGreenBlue_24 = 0x00040000,
00356 CELLTYPE_BlueGreenRed_24 = 0x00080000,
00357 CELLTYPE_RedGreenBlueAlpha_32 = 0x00100000,
00358 CELLTYPE_AlphaRedGreenBlue_32 = 0x00200000,
00359 CELLTYPE_CyanMagentaYellowBlack_32 = 0x00400000,
00360 CELLTYPE_BlackCyanMagentaYellow_32 = 0x00800000,
00361
00362
00363
00364 CELLTYPE_None = 0x00000000,
00365 CELLTYPE_Unsigned_Max8 = (CELLTYPE_Binary | CELLTYPE_Unsigned_4 | CELLTYPE_Unsigned_8),
00366 CELLTYPE_Unsigned_Max16 = (CELLTYPE_Unsigned_Max8 | CELLTYPE_Unsigned_16),
00367 CELLTYPE_Unsigned_Max32 = (CELLTYPE_Unsigned_Max16 | CELLTYPE_Unsigned_32),
00368 CELLTYPE_Unsigned_Max64 = (CELLTYPE_Unsigned_Max32 | CELLTYPE_Unsigned_64),
00369 CELLTYPE_Unsigned = (CELLTYPE_Unsigned_Max64),
00370 CELLTYPE_Signed_Max16 = (CELLTYPE_Signed_8 | CELLTYPE_Signed_16),
00371 CELLTYPE_Signed_Max32 = (CELLTYPE_Signed_Max16 | CELLTYPE_Signed_32),
00372 CELLTYPE_Signed_Max64 = (CELLTYPE_Signed_Max32 | CELLTYPE_Signed_64),
00373 CELLTYPE_Signed = (CELLTYPE_Signed_Max64),
00374 CELLTYPE_Integer_Max8 = (CELLTYPE_Unsigned_Max8 | CELLTYPE_Signed_8),
00375 CELLTYPE_Integer_Max16 = (CELLTYPE_Unsigned_Max16 | CELLTYPE_Signed_Max32),
00376 CELLTYPE_Integer_Max32 = (CELLTYPE_Unsigned_Max32 | CELLTYPE_Signed_Max32),
00377 CELLTYPE_Integer_Max64 = (CELLTYPE_Unsigned_Max64 | CELLTYPE_Signed_Max64),
00378 CELLTYPE_Integer = (CELLTYPE_Unsigned | CELLTYPE_Signed),
00379 CELLTYPE_Float = (CELLTYPE_Float_32 | CELLTYPE_Float_64),
00380 CELLTYPE_Scalar = (CELLTYPE_Integer | CELLTYPE_Float),
00381 CELLTYPE_ComplexRI = (CELLTYPE_ComplexRI_64 | CELLTYPE_ComplexRI_128),
00382 CELLTYPE_ComplexMP = (CELLTYPE_ComplexMP_64 | CELLTYPE_ComplexMP_128),
00383 CELLTYPE_Complex = (CELLTYPE_ComplexRI | CELLTYPE_ComplexMP),
00384 CELLTYPE_ColorRGB = (CELLTYPE_X1R5G5B5_16 | CELLTYPE_X1B5G5R5_16 | CELLTYPE_RedGreenBlue_24 | CELLTYPE_BlueGreenRed_24),
00385 CELLTYPE_ColorRGBA = (CELLTYPE_RedGreenBlueAlpha_32 | CELLTYPE_AlphaRedGreenBlue_32),
00386 CELLTYPE_ColorCMYK = (CELLTYPE_CyanMagentaYellowBlack_32 | CELLTYPE_BlackCyanMagentaYellow_32),
00387 CELLTYPE_ColorNoAlpha = (CELLTYPE_ColorRGB | CELLTYPE_ColorCMYK),
00388 CELLTYPE_ColorHasAlpha = (CELLTYPE_ColorRGBA),
00389 CELLTYPE_Color = (CELLTYPE_ColorNoAlpha | CELLTYPE_ColorHasAlpha),
00390 CELLTYPE_ColorMapValid = (CELLTYPE_Unsigned_4 | CELLTYPE_Unsigned_8 | CELLTYPE_Unsigned_16),
00391 CELLTYPE_3Cell_Color = (CELLTYPE_ColorRGB),
00392 CELLTYPE_4Cell_Color = (CELLTYPE_ColorRGBA | CELLTYPE_ColorCMYK),
00393 CELLTYPE_HasAlphaBand = (CELLTYPE_ColorHasAlpha),
00394 CELLTYPE_DatabaseValid = (CELLTYPE_Integer_Max32),
00395 CELLTYPE_HistogramValid = (CELLTYPE_Scalar | CELLTYPE_Complex),
00396 CELLTYPE_All = (CELLTYPE_Scalar | CELLTYPE_Complex | CELLTYPE_Color)
00397 };
00398
00399 enum PACKORDER {
00400 PACKORDER_LeastSigBit = 0,
00401 PACKORDER_MostSigBit
00402 };
00403
00404 enum PYRAMID {
00405 PYRAMID_Default = 0x000,
00406 PYRAMID_Rebuild = 0x001,
00407 PYRAMID_Average = 0x002,
00408 PYRAMID_UseParentTileSize = 0x008,
00409 PYRAMID_UseColorMap = 0x010,
00410 PYRAMID_Disable = 0x080,
00411 PYRAMID_CompressLossy = 0x100,
00412 PYRAMID_CompressLossless = 0x200,
00413 PYRAMID_LargerMinTierSize = 0x400,
00414 PYRAMID_NoHistogram = 0x800,
00415 };
00416
00417 #ifndef GENERATING_DOXYGEN_OUTPUT
00418 class BANDPARMS;
00419 class NULLVALUE;
00420 class OBSERVER;
00421 #endif
00422
00425 static CELLTYPE ComputeCellType (
00426 DATATYPE datatype,
00427 UINT16 numbits
00428 );
00429
00432 static CELLTYPE ComputeCellTypeFromLegacy (
00433 UINT32 datatype,
00434 UINT16 numbits
00435 );
00436
00439 DEPRECATED static UINT16 ConvToRVCTYPE (
00440 CELLTYPE CellType
00441 );
00442
00445 DEPRECATED static UINT16 ConvToRVCTYPE (
00446 DATATYPE type,
00447 UINT16 NumBits
00448 );
00449
00452 static CELLTYPE GetCellTypeFromColorSpace (
00453 COLORSPACE ColorSpace
00454 );
00455
00457 static void GetCellTypeRange (
00458 CELLTYPE CellType,
00459 DOUBLE_RANGE& Range,
00460 int component = 0
00461 );
00462
00465 static MISTRING GetCellTypeString (
00466 CELLTYPE CellType
00467 );
00468
00471 static COLORSPACE GetColorSpaceFromCellType (
00472 CELLTYPE CellType,
00473 bool haspalette = false
00474 );
00475
00479 static INT32 GetCompositeBandNum (
00480 ) { return (-1); }
00481
00483 static DATATYPE GetDataTypeFromCellType (
00484 CELLTYPE CellType
00485 );
00486
00489 static RVC::IMAGE* GetImage (
00490 const RVC::OBJECT& object
00491 );
00492
00495 static RVC::IMAGE* GetImage (
00496 const RVC::OBJITEM& ObjItem
00497 );
00498
00500 static UINT16 GetNumBitsFromCellType (
00501 CELLTYPE CellType
00502 );
00503
00505 static UINT16 GetNumComponentsFromCellType (
00506 CELLTYPE CellType
00507 );
00508
00510 static NUMTYPE GetNumTypeFromCellType (
00511 CELLTYPE CellType
00512 );
00513
00516 static RVC::OBJTYPESET GetObjTypeSet ();
00517
00519 static bool IsImage (
00520 RVC::OBJTYPE ObjType
00521 );
00522
00524 IMAGE ();
00525
00527 IMAGE (
00528 const IMAGE& rhs
00529 );
00530
00532 virtual ~IMAGE () = 0;
00533
00535 ERRVALUE GetBandParms (
00536 INT32 BandNum,
00537 BANDPARMS& BandParms
00538 ) const { return (v_GetBandParms(BandNum, BandParms)); }
00539
00542 CELLTYPE GetCellType (
00543 ) const { return (v_GetCellType()); }
00544
00547 double GetColumnScale (
00548 ) const { return (v_GetColumnScale()); }
00549
00552 double GetLineScale (
00553 ) const { return (v_GetLineScale()); }
00554
00556 ERRVALUE GetNullValue (
00557 INT32 BandNum,
00558 NULLVALUE& NullValue
00559 ) const { return (v_GetNullValue(BandNum, NullValue)); }
00560
00563 INT32 GetNumBands (
00564 ) const { return (v_GetNumBands()); }
00565
00567 INT64 GetNumCells () const
00568 { return (static_cast<INT64>(GetNumColumns()) * static_cast<INT64>(GetNumRows())); }
00569
00572 INT32 GetNumColumns (
00573 ) const { return (v_GetNumColumns()); }
00574
00577 INT32 GetNumLines (
00578 ) const { return (v_GetNumLines()); }
00579
00582 INT32 GetNumRows (
00583 ) const { return (v_GetNumLines()); }
00584
00587 bool HasNullValue (
00588 INT32 BandNum
00589 ) const { return (v_HasNullValue(BandNum)); }
00590
00592 ERRVALUE ReadBand (
00593 INT32 Band,
00594 INT32 Row,
00595 INT32 StartColumn,
00596 void *data,
00597 INT32 Length = 1,
00598 CONVMODE Convert = CONVMODE_None
00599 ) const { return (v_ReadBand(Band, Row, StartColumn, data, Length, Convert)); }
00600
00602 ERRVALUE ReadBand (
00603 INT32 Band,
00604 INT32 Row,
00605 INT32 StartColumn,
00606 INT8 *data,
00607 INT32 Length = 1
00608 ) const { return (v_ReadBand(Band, Row, StartColumn, data, Length, CONVMODE_INT8)); }
00609
00611 ERRVALUE ReadBand (
00612 INT32 Band,
00613 INT32 Row,
00614 INT32 StartColumn,
00615 UINT8 *data,
00616 INT32 Length = 1
00617 ) const { return (v_ReadBand(Band, Row, StartColumn, data, Length, CONVMODE_INT8)); }
00618
00620 ERRVALUE ReadBand (
00621 INT32 Band,
00622 INT32 Row,
00623 INT32 StartColumn,
00624 INT16 *data,
00625 INT32 Length = 1
00626 ) const { return (v_ReadBand(Band, Row, StartColumn, data, Length, CONVMODE_INT16)); }
00627
00629 ERRVALUE ReadBand (
00630 INT32 Band,
00631 INT32 Row,
00632 INT32 StartColumn,
00633 UINT16 *data,
00634 INT32 Length = 1
00635 ) const { return (v_ReadBand(Band, Row, StartColumn, data, Length, CONVMODE_INT16)); }
00636
00638 ERRVALUE ReadBand (
00639 INT32 Band,
00640 INT32 Row,
00641 INT32 StartColumn,
00642 INT32 *data,
00643 INT32 Length = 1
00644 ) const { return (v_ReadBand(Band, Row, StartColumn, data, Length, CONVMODE_INT32)); }
00645
00647 ERRVALUE ReadBand (
00648 INT32 Band,
00649 INT32 Row,
00650 INT32 StartColumn,
00651 UINT32 *data,
00652 INT32 Length = 1
00653 ) const { return (v_ReadBand(Band, Row, StartColumn, data, Length, CONVMODE_INT32)); }
00654
00656 ERRVALUE ReadBand (
00657 INT32 Band,
00658 INT32 Row,
00659 INT32 StartColumn,
00660 float *data,
00661 INT32 Length = 1
00662 ) const { return (v_ReadBand(Band, Row, StartColumn, data, Length, CONVMODE_Float)); }
00663
00665 ERRVALUE ReadBand (
00666 INT32 Band,
00667 INT32 Row,
00668 INT32 StartColumn,
00669 double *data,
00670 INT32 Length = 1
00671 ) const { return (v_ReadBand(Band, Row, StartColumn, data, Length, CONVMODE_Double)); }
00672
00674 ERRVALUE ReadColumnBand (
00675 INT32 Band,
00676 INT32 Row,
00677 INT32 StartColumn,
00678 void *data,
00679 INT32 Length = 1,
00680 CONVMODE Convert = CONVMODE_None
00681 ) const { return (v_ReadColumnBand(Band, Row, StartColumn, data, Length, Convert)); }
00682
00684 ERRVALUE ReadColumnBand (
00685 INT32 Band,
00686 INT32 Row,
00687 INT32 StartColumn,
00688 INT8 *data,
00689 INT32 Length = 1
00690 ) const { return (v_ReadColumnBand(Band, Row, StartColumn, data, Length, CONVMODE_INT8)); }
00691
00693 ERRVALUE ReadColumnBand (
00694 INT32 Band,
00695 INT32 Row,
00696 INT32 StartColumn,
00697 UINT8 *data,
00698 INT32 Length = 1
00699 ) const { return (v_ReadColumnBand(Band, Row, StartColumn, data, Length, CONVMODE_INT8)); }
00700
00702 ERRVALUE ReadColumnBand (
00703 INT32 Band,
00704 INT32 Row,
00705 INT32 StartColumn,
00706 INT16 *data,
00707 INT32 Length = 1
00708 ) const { return (v_ReadColumnBand(Band, Row, StartColumn, data, Length, CONVMODE_INT16)); }
00709
00711 ERRVALUE ReadColumnBand (
00712 INT32 Band,
00713 INT32 Row,
00714 INT32 StartColumn,
00715 UINT16 *data,
00716 INT32 Length = 1
00717 ) const { return (v_ReadColumnBand(Band, Row, StartColumn, data, Length, CONVMODE_INT16)); }
00718
00720 ERRVALUE ReadColumnBand (
00721 INT32 Band,
00722 INT32 Row,
00723 INT32 StartColumn,
00724 INT32 *data,
00725 INT32 Length = 1
00726 ) const { return (v_ReadColumnBand(Band, Row, StartColumn, data, Length, CONVMODE_INT32)); }
00727
00729 ERRVALUE ReadColumnBand (
00730 INT32 Band,
00731 INT32 Row,
00732 INT32 StartColumn,
00733 UINT32 *data,
00734 INT32 Length = 1
00735 ) const { return (v_ReadColumnBand(Band, Row, StartColumn, data, Length, CONVMODE_INT32)); }
00736
00738 ERRVALUE ReadColumnBand (
00739 INT32 Band,
00740 INT32 Row,
00741 INT32 StartColumn,
00742 float *data,
00743 INT32 Length = 1
00744 ) const { return (v_ReadColumnBand(Band, Row, StartColumn, data, Length, CONVMODE_Float)); }
00745
00747 ERRVALUE ReadColumnBand (
00748 INT32 Band,
00749 INT32 Row,
00750 INT32 StartColumn,
00751 double *data,
00752 INT32 Length = 1
00753 ) const { return (v_ReadColumnBand(Band, Row, StartColumn, data, Length, CONVMODE_Double)); }
00754
00757 ERRVALUE SetNullValue (
00758 INT32 BandNum,
00759 const NULLVALUE* NullValue
00760 ) { return (v_SetNullValue(BandNum, NullValue)); }
00761
00763 ERRVALUE SetCacheRect (
00764 const LRECT2D& Rect
00765 ) { return (v_SetCacheRect(Rect)); }
00766
00768 ERRVALUE SetCacheSize (
00769 INT32 NumTiles
00770 ) { return (v_SetCacheSize(NumTiles)); }
00771
00773 ERRVALUE SetCacheSize (
00774 CACHEMODE CacheFlags
00775 ) { return (v_SetCacheSize(CacheFlags)); }
00776
00778 ERRVALUE WriteBand (
00779 INT32 Band,
00780 INT32 Row,
00781 INT32 StartColumn,
00782 const void *data,
00783 INT32 Length = 1,
00784 CONVMODE Convert = CONVMODE_None
00785 ) { return (v_WriteBand(Band, Row, StartColumn, data, Length, Convert)); }
00786
00788 ERRVALUE WriteBand (
00789 INT32 Band,
00790 INT32 Row,
00791 INT32 StartColumn,
00792 const INT8 *data,
00793 INT32 Length = 1
00794 ) { return (v_WriteBand(Band, Row, StartColumn, data, Length, CONVMODE_INT8)); }
00795
00797 ERRVALUE WriteBand (
00798 INT32 Band,
00799 INT32 Row,
00800 INT32 StartColumn,
00801 const UINT8 *data,
00802 INT32 Length = 1
00803 ) { return (v_WriteBand(Band, Row, StartColumn, data, Length, CONVMODE_INT8)); }
00804
00806 ERRVALUE WriteBand (
00807 INT32 Band,
00808 INT32 Row,
00809 INT32 StartColumn,
00810 const INT16 *data,
00811 INT32 Length = 1
00812 ) { return (v_WriteBand(Band, Row, StartColumn, data, Length, CONVMODE_INT16)); }
00813
00815 ERRVALUE WriteBand (
00816 INT32 Band,
00817 INT32 Row,
00818 INT32 StartColumn,
00819 const UINT16 *data,
00820 INT32 Length = 1
00821 ) { return (v_WriteBand(Band, Row, StartColumn, data, Length, CONVMODE_INT16)); }
00822
00824 ERRVALUE WriteBand (
00825 INT32 Band,
00826 INT32 Row,
00827 INT32 StartColumn,
00828 const INT32 *data,
00829 INT32 Length = 1
00830 ) { return (v_WriteBand(Band, Row, StartColumn, data, Length, CONVMODE_INT32)); }
00831
00833 ERRVALUE WriteBand (
00834 INT32 Band,
00835 INT32 Row,
00836 INT32 StartColumn,
00837 const UINT32 *data,
00838 INT32 Length = 1
00839 ) { return (v_WriteBand(Band, Row, StartColumn, data, Length, CONVMODE_INT32)); }
00840
00842 ERRVALUE WriteBand (
00843 INT32 Band,
00844 INT32 Row,
00845 INT32 StartColumn,
00846 const float *data,
00847 INT32 Length = 1
00848 ) { return (v_WriteBand(Band, Row, StartColumn, data, Length, CONVMODE_Float)); }
00849
00851 ERRVALUE WriteBand (
00852 INT32 Band,
00853 INT32 Row,
00854 INT32 StartColumn,
00855 const double *data,
00856 INT32 Length = 1
00857 ) { return (v_WriteBand(Band, Row, StartColumn, data, Length, CONVMODE_Double)); }
00858
00859 protected:
00860
00861 static DATATYPE ConvToDATATYPE (
00862 int RvcType,
00863 UINT16 NumBits
00864 );
00865
00866 static UINT32 ConvToRastMode (
00867 CONVMODE value
00868 );
00869
00870 #ifndef GENERATING_DOXYGEN_OUTPUT
00871 static void ImageCallbackFunc (ANYCALLBACKSTRUCT* cb, void *data);
00872 #endif // GENERATING_DOXYGEN_OUTPUT
00873
00874 private:
00875 #ifndef GENERATING_DOXYGEN_OUTPUT
00876
00877 virtual ERRVALUE v_GetBandParms (INT32 BandNum, BANDPARMS& BandParms) const = 0;
00878 virtual CELLTYPE v_GetCellType () const = 0;
00879 virtual double v_GetColumnScale () const = 0;
00880 virtual double v_GetLineScale () const = 0;
00881 virtual ERRVALUE v_GetNullValue (INT32 BandNum, NULLVALUE& NullValue) const = 0;
00882 virtual INT32 v_GetNumBands () const = 0;
00883 virtual INT32 v_GetNumColumns () const = 0;
00884 virtual INT32 v_GetNumLines () const = 0;
00885 virtual bool v_HasNullValue (INT32 BandNum) const = 0;
00886 virtual ERRVALUE v_ReadBand (INT32 Band, INT32 Row, INT32 StartColumn, void *data, INT32 Length, CONVMODE Convert) const = 0;
00887 virtual ERRVALUE v_ReadColumnBand (INT32 Band, INT32 Row, INT32 StartColumn, void *data, INT32 Length, CONVMODE Convert) const = 0;
00888 virtual ERRVALUE v_SetCacheRect (const LRECT2D& Rect) = 0;
00889 virtual ERRVALUE v_SetCacheSize (INT32 NumTiles) = 0;
00890 virtual ERRVALUE v_SetCacheSize (CACHEMODE CacheFlags) = 0;
00891 virtual ERRVALUE v_SetNullValue (INT32 BandNum, const NULLVALUE* NullValue) = 0;
00892 virtual ERRVALUE v_WriteBand (INT32 Band, INT32 Row, INT32 StartColumn, const void *data, INT32 Length, CONVMODE Convert) = 0;
00893 #endif // GENERATING_DOXYGEN_OUTPUT
00894
00895 };
00896
00897 #ifndef GENERATING_DOXYGEN_OUTPUT
00898 DEFINE_ENUM_OP_BITWISE(IMAGE::CELLTYPE)
00899 DEFINE_ENUM_OP_BITWISE(IMAGE::PYRAMID)
00900 #endif
00901
00903 class IMAGE::BANDPARMS {
00904 public:
00905
00907 BANDPARMS (
00908 ) :
00909 m_CellType(CELLTYPE_Invalid),
00910 m_PackOrder(PACKORDER_MostSigBit)
00911 {}
00912
00914 ~BANDPARMS (
00915 ) {}
00916
00919 UINT16 GetNumBits (
00920 ) const { return (IMAGE::GetNumBitsFromCellType(m_CellType)); }
00921
00924 CELLTYPE GetCellType (
00925 ) const { return (m_CellType); }
00926
00929 DATATYPE GetDataType (
00930 ) const { return (IMAGE::GetDataTypeFromCellType(m_CellType)); }
00931
00934 PACKORDER GetPackOrder (
00935 ) const { return (m_PackOrder); }
00936
00938 void SetCellType (
00939 CELLTYPE CellType
00940 ) { m_CellType = CellType; }
00941
00943 void SetName (
00944 const OBJECTNAME& name
00945 ) { m_Name = name; }
00946
00948 void SetName (
00949 const char *name
00950 ) { m_Name.Assign(name); }
00951
00953 void SetPackOrder (
00954 PACKORDER PackOrder
00955 ) { m_PackOrder = PackOrder; }
00956
00957 private:
00958 #ifndef GENERATING_DOXYGEN_OUTPUT
00959 OBJECTNAME m_Name;
00960 CELLTYPE m_CellType;
00961 PACKORDER m_PackOrder;
00962 #endif // GENERATING_DOXYGEN_OUTPUT
00963 };
00964
00965
00967 class IMAGE::NULLVALUE {
00968 public:
00969
00971 enum CONFLICTADJUST {
00972 CONFLICTADJUST_Auto,
00973 CONFLICTADJUST_None,
00974 CONFLICTADJUST_Down,
00975 CONFLICTADJUST_Up
00976 };
00977
00979 NULLVALUE (
00980 ): m_CellType(CELLTYPE_Invalid)
00981 {
00982 SetDefault();
00983 }
00984
00986 explicit NULLVALUE (
00987 CELLTYPE CellType
00988 ): m_CellType(CellType)
00989 {
00990 SetDefault();
00991 }
00992
00996 ERRVALUE ApplyMask (
00997 void *cellbuffer,
00998 const UINT8 *maskbuffer,
00999 INT32 count,
01000 CONFLICTADJUST conflictadjust = CONFLICTADJUST_Auto
01001 ) const;
01002
01005 ERRVALUE ConvToCellType (
01006 double value,
01007 bool setEachColorToValue = false
01008 );
01009
01012 ERRVALUE ConvFromCellType (
01013 double &value
01014 );
01015
01017 ERRVALUE ExtractMask (
01018 const void *cellbuffer,
01019 UINT8 *maskbuffer,
01020 INT32 count
01021 ) const;
01022
01024 void GetValue (
01025 ANYRASTVALUE& value
01026 ) const;
01027
01030 ERRVALUE GetValue (
01031 INT8& value
01032 ) const;
01033
01036 ERRVALUE GetValue (
01037 UINT8& value
01038 ) const;
01039
01042 ERRVALUE GetValue (
01043 INT16& value
01044 ) const;
01045
01048 ERRVALUE GetValue (
01049 UINT16& value
01050 ) const;
01051
01054 ERRVALUE GetValue (
01055 INT32& value
01056 ) const;
01057
01060 ERRVALUE GetValue (
01061 UINT32& value
01062 ) const;
01063
01066 ERRVALUE GetValue (
01067 float& value
01068 ) const;
01069
01072 ERRVALUE GetValue (
01073 double& value
01074 ) const;
01075
01078 ERRVALUE GetValue (
01079 FCOMPLEXRI& value
01080 ) const;
01081
01084 ERRVALUE GetValue (
01085 FCOMPLEXMP& value
01086 ) const;
01087
01090 ERRVALUE GetValue (
01091 DCOMPLEXRI& value
01092 ) const;
01093
01096 ERRVALUE GetValue (
01097 DCOMPLEXMP& value
01098 ) const;
01099
01102 void SetCellType (
01103 CELLTYPE CellType
01104 ) { m_CellType = CellType; SetDefault(); }
01105
01107 void SetDefault (
01108 );
01109
01111 void SetValue (
01112 CELLTYPE CellType,
01113 const ANYRASTVALUE& value
01114 );
01115
01118 ERRVALUE SetValue (
01119 int value
01120 );
01121
01124 ERRVALUE SetValue (
01125 unsigned int value
01126 );
01127
01130 ERRVALUE SetValue (
01131 double value
01132 );
01133
01136 ERRVALUE SetValue (
01137 const FCOMPLEXRI& value
01138 );
01139
01142 ERRVALUE SetValue (
01143 const FCOMPLEXMP& value
01144 );
01145
01148 ERRVALUE SetValue (
01149 const DCOMPLEXRI& value
01150 );
01151
01154 ERRVALUE SetValue (
01155 const DCOMPLEXMP& value
01156 );
01157
01158 private:
01159 #ifndef GENERATING_DOXYGEN_OUTPUT
01160 double m_ValueD;
01161 double m_ValueD2;
01162 UINT8 m_ValueRGB[4];
01163 CELLTYPE m_CellType;
01164
01165 bool ApplyAdjustment (CONFLICTADJUST adjustment);
01166 bool IsColor () const;
01167 bool IsComplex () const;
01168 bool IsInt () const;
01169 #endif // GENERATING_DOXYGEN_OUTPUT
01170
01171 };
01172
01173
01175 class IMAGE::OBSERVER : public RVC::OBJECTOBSERVER {
01176 public:
01177 enum TYPE {
01178 TYPE_NullValueChange = 0x00000111
01179 };
01180
01181 explicit OBSERVER (
01182 RVC::IMAGE& object
01183 ) : OBJECTOBSERVER(object) {}
01184
01185 virtual ~OBSERVER (
01186 ) {}
01187
01188 private:
01190 virtual void v_OnNullValueChanged (
01191 const ANYRASTVALUE& NullValue,
01192 bool IsNullUsed
01193 );
01194
01195 #ifndef GENERATING_DOXYGEN_OUTPUT
01196 virtual void OnNotifyRaw (UINT32 reason, void *data);
01197 #endif // GENERATING_DOXYGEN_OUTPUT
01198 };
01199
01200 }
01201
01202 #endif