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 #ifndef INC_RVC_IMAGE_H
00128 #define INC_RVC_IMAGE_H
00129
00130 #ifndef INC_RVC_GEOSPATL_H
00131 #include <rvc/geospatl.h>
00132 #endif
00133
00134 #ifndef INC_MI32_RVCRAST_H
00135 #include <mi32/rvcrast.h>
00136 #endif
00137
00138 #ifndef INC_MI32_COLORSPC_H
00139 #include <mi32/colorspc.h>
00140 #endif
00141
00142 #ifndef INC_MI32_RANGE_H
00143 #include <mi32/range.h>
00144 #endif
00145
00146
00147 namespace RVC {
00148
00149 struct AnyCallbackStruct;
00150
00151 class IMAGE : public RVC::GEOSPATIAL {
00152 public:
00153
00154 enum CACHEMODE {
00155 CACHEMODE_Default = 0,
00156 CACHEMODE_DiagonalRow,
00157 CACHEMODE_TileRow
00158 };
00159
00160 enum CAPABILITY {
00161 CAPABILITY_None = 0,
00162 CAPABILITY_SequentialReadOptimal = 1024
00163 };
00164
00165
00166 enum CONVMODE {
00167 CONVMODE_None = 0,
00168 CONVMODE_ByteSpread,
00169 CONVMODE_INT8,
00170 CONVMODE_INT16,
00171 CONVMODE_INT32,
00172 CONVMODE_Float,
00173 CONVMODE_Double,
00174 CONVMODE_RGB,
00175 CONVMODE_BGR,
00176 CONVMODE_RGBSpread,
00177 CONVMODE_BGRSpread
00178 };
00179
00180
00181 enum DATATYPE {
00182 DATATYPE_Invalid = 0,
00183 DATATYPE_Unsigned,
00184 DATATYPE_Signed,
00185 DATATYPE_Float,
00186 DATATYPE_BGR,
00187 DATATYPE_RGB,
00188 DATATYPE_BGR16,
00189 DATATYPE_RGB16,
00190 DATATYPE_ComplexRI,
00191 DATATYPE_ComplexMP,
00192 DATATYPE_RGBA,
00193 DATATYPE_ARGB,
00194 DATATYPE_CMYK,
00195 DATATYPE_KCMY
00196 };
00197
00198
00199 enum CELLTYPE {
00200 CELLTYPE_Invalid = 0x00000000,
00201 CELLTYPE_Binary = 0x00000001,
00202 CELLTYPE_Unsigned_4 = 0x00000002,
00203 CELLTYPE_Unsigned_8 = 0x00000004,
00204 CELLTYPE_Unsigned_32 = 0x00000008,
00205 CELLTYPE_Unsigned_16 = 0x00000010,
00206 CELLTYPE_Unsigned_64 = 0x00000020,
00207 CELLTYPE_Signed_8 = 0x00000040,
00208 CELLTYPE_Signed_16 = 0x00000080,
00209 CELLTYPE_Signed_32 = 0x00000100,
00210 CELLTYPE_Signed_64 = 0x00000200,
00211 CELLTYPE_Float_32 = 0x00000400,
00212 CELLTYPE_Float_64 = 0x00000800,
00213 CELLTYPE_ComplexRI_64 = 0x00001000,
00214 CELLTYPE_ComplexMP_64 = 0x00002000,
00215 CELLTYPE_ComplexRI_128 = 0x00004000,
00216 CELLTYPE_ComplexMP_128 = 0x00008000,
00217 CELLTYPE_X1R5G5B5_16 = 0x00010000,
00218 CELLTYPE_X1B5G5R5_16 = 0x00020000,
00219 CELLTYPE_RedGreenBlue_24 = 0x00040000,
00220 CELLTYPE_BlueGreenRed_24 = 0x00080000,
00221 CELLTYPE_RedGreenBlueAlpha_32 = 0x00100000,
00222 CELLTYPE_AlphaRedGreenBlue_32 = 0x00200000,
00223 CELLTYPE_CyanMagentaYellowBlack_32 = 0x00400000,
00224 CELLTYPE_BlackCyanMagentaYellow_32 = 0x00800000,
00225
00226
00227
00228 CELLTYPE_None = 0x00000000,
00229 CELLTYPE_Unsigned_Max8 = (CELLTYPE_Binary + CELLTYPE_Unsigned_4 + CELLTYPE_Unsigned_8),
00230 CELLTYPE_Unsigned_Max16 = (CELLTYPE_Unsigned_Max8 + CELLTYPE_Unsigned_16),
00231 CELLTYPE_Unsigned_Max32 = (CELLTYPE_Unsigned_Max16 + CELLTYPE_Unsigned_32),
00232 CELLTYPE_Unsigned_Max64 = (CELLTYPE_Unsigned_Max32 + CELLTYPE_Unsigned_64),
00233 CELLTYPE_Signed_Max32 = (CELLTYPE_Signed_8 + CELLTYPE_Signed_16 + CELLTYPE_Signed_32),
00234 CELLTYPE_Signed_Max64 = (CELLTYPE_Signed_Max32 + CELLTYPE_Signed_64),
00235 CELLTYPE_Integer_Max32 = (CELLTYPE_Unsigned_Max32 + CELLTYPE_Signed_Max32),
00236 CELLTYPE_Integer_Max64 = (CELLTYPE_Unsigned_Max64 + CELLTYPE_Signed_Max64),
00237 CELLTYPE_Float = (CELLTYPE_Float_32 + CELLTYPE_Float_64),
00238 CELLTYPE_Scalar = (CELLTYPE_Integer_Max64 + CELLTYPE_Float),
00239 CELLTYPE_Complex = (CELLTYPE_ComplexRI_64 + CELLTYPE_ComplexMP_64 + CELLTYPE_ComplexRI_128 + CELLTYPE_ComplexMP_128),
00240 CELLTYPE_3Cell_Color = (CELLTYPE_X1R5G5B5_16 + CELLTYPE_X1B5G5R5_16 + CELLTYPE_RedGreenBlue_24 + CELLTYPE_BlueGreenRed_24),
00241 CELLTYPE_4Cell_Color = (CELLTYPE_RedGreenBlueAlpha_32 + CELLTYPE_AlphaRedGreenBlue_32 + CELLTYPE_CyanMagentaYellowBlack_32 + CELLTYPE_BlackCyanMagentaYellow_32),
00242 CELLTYPE_Color = (CELLTYPE_3Cell_Color + CELLTYPE_4Cell_Color),
00243 CELLTYPE_ColorMapValid = (CELLTYPE_Unsigned_4 + CELLTYPE_Unsigned_8 + CELLTYPE_Unsigned_16),
00244 CELLTYPE_HasAlphaBand = (CELLTYPE_RedGreenBlueAlpha_32 + CELLTYPE_AlphaRedGreenBlue_32),
00245 CELLTYPE_DatabaseValid = (CELLTYPE_Integer_Max32),
00246 CELLTYPE_All = (CELLTYPE_Scalar + CELLTYPE_Complex + CELLTYPE_Color)
00247 };
00248
00249 enum PACKORDER {
00250 PACKORDER_LeastSigBit = 0,
00251 PACKORDER_MostSigBit
00252 };
00253
00254 enum PYRAMID {
00255 PYRAMID_Default = 0x00,
00256 PYRAMID_None = PYRAMID_Default,
00257 PYRAMID_Rebuild = 0x01,
00258 PYRAMID_Average = 0x02,
00259 PYRAMID_Full = 0x04,
00260 PYRAMID_UseParentTileSize = 0x08,
00261 PYRAMID_UseColorMap = 0x10,
00262 PYRAMID_Partial = 0x20
00263 };
00264
00265 #ifndef GENERATING_DOXYGEN_OUTPUT
00266 class BANDPARMS;
00267 class NULLVALUE;
00268 class OBSERVER;
00269 #endif // GENERATING_DOXYGEN_OUTPUT
00270
00271
00272 IMAGE (
00273 );
00274
00275
00276 IMAGE (
00277 const IMAGE& rhs
00278 );
00279
00280
00281 virtual ~IMAGE (
00282 ) = 0;
00283
00284
00285 ERRVALUE GetBandParms (
00286 INT32 BandNum,
00287 BANDPARMS& BandParms
00288 ) const { return (v_GetBandParms(BandNum, BandParms)); }
00289
00290
00291
00292 static CELLTYPE GetCellTypeFromColorSpace (
00293 COLORSPACE ColorSpace
00294 );
00295
00296
00297
00298 static CELLTYPE GetCellTypeFromDataTypeAndNumBits (
00299 UINT32 datatype,
00300 UINT16 numbits
00301 );
00302
00303
00304 static void GetCellTypeRange (
00305 CELLTYPE CellType,
00306 DOUBLE_RANGE& Range
00307 );
00308
00309
00310
00311 static MISTRING GetCellTypeString (
00312 CELLTYPE CellType
00313 );
00314
00315
00316
00317 static COLORSPACE GetColorSpaceFromCellType (
00318 CELLTYPE CellType,
00319 bool haspalette = false
00320 );
00321
00322
00323
00324 double GetColumnScale (
00325 ) const { return (v_GetColumnScale()); }
00326
00327
00328
00329
00330 static INT32 GetCompositeBandNum (
00331 ) { return (-1); }
00332
00333
00334 static DATATYPE GetDataTypeFromCellType (
00335 CELLTYPE CellType
00336 );
00337
00338
00339
00340 static RVC::IMAGE* GetImage (
00341 const RVC::OBJECT& object
00342 );
00343
00344
00345
00346 static RVC::IMAGE* GetImage (
00347 const RVC::OBJITEM& ObjItem
00348 );
00349
00350
00351
00352 double GetLineScale (
00353 ) const { return (v_GetLineScale()); }
00354
00355
00356 ERRVALUE GetNullValue (
00357 INT32 BandNum,
00358 NULLVALUE& NullValue
00359 ) const { return (v_GetNullValue(BandNum, NullValue)); }
00360
00361
00362
00363 INT32 GetNumBands (
00364 ) const { return (v_GetNumBands()); }
00365
00366
00367 static UINT16 GetNumBitsFromCellType (
00368 CELLTYPE CellType
00369 );
00370
00371
00372
00373 INT32 GetNumColumns (
00374 ) const { return (v_GetNumColumns()); }
00375
00376
00377
00378 INT32 GetNumLines (
00379 ) const { return (v_GetNumLines()); }
00380
00381
00382
00383 static RVC::OBJTYPESET GetObjTypeSet (
00384 );
00385
00386
00387
00388 bool HasNullValue (
00389 INT32 BandNum
00390 ) const { return (v_HasNullValue(BandNum)); }
00391
00392
00393 static bool IsImage (
00394 RVC::OBJTYPE ObjType
00395 );
00396
00397
00398 ERRVALUE ReadBand (
00399 INT32 Band,
00400 INT32 Line,
00401 INT32 StartColumn,
00402 void *data,
00403 INT32 Length = 1,
00404 CONVMODE Convert = CONVMODE_None
00405 ) const { return (v_ReadBand(Band, Line, StartColumn, data, Length, Convert)); }
00406
00407
00408 ERRVALUE ReadBand (
00409 INT32 Band,
00410 INT32 Line,
00411 INT32 StartColumn,
00412 INT8 *data,
00413 INT32 Length = 1
00414 ) const { return (v_ReadBand(Band, Line, StartColumn, data, Length, CONVMODE_INT8)); }
00415
00416
00417 ERRVALUE ReadBand (
00418 INT32 Band,
00419 INT32 Line,
00420 INT32 StartColumn,
00421 UINT8 *data,
00422 INT32 Length = 1
00423 ) const { return (v_ReadBand(Band, Line, StartColumn, data, Length, CONVMODE_INT8)); }
00424
00425
00426 ERRVALUE ReadBand (
00427 INT32 Band,
00428 INT32 Line,
00429 INT32 StartColumn,
00430 INT16 *data,
00431 INT32 Length = 1
00432 ) const { return (v_ReadBand(Band, Line, StartColumn, data, Length, CONVMODE_INT16)); }
00433
00434
00435 ERRVALUE ReadBand (
00436 INT32 Band,
00437 INT32 Line,
00438 INT32 StartColumn,
00439 UINT16 *data,
00440 INT32 Length = 1
00441 ) const { return (v_ReadBand(Band, Line, StartColumn, data, Length, CONVMODE_INT16)); }
00442
00443
00444 ERRVALUE ReadBand (
00445 INT32 Band,
00446 INT32 Line,
00447 INT32 StartColumn,
00448 INT32 *data,
00449 INT32 Length = 1
00450 ) const { return (v_ReadBand(Band, Line, StartColumn, data, Length, CONVMODE_INT32)); }
00451
00452
00453 ERRVALUE ReadBand (
00454 INT32 Band,
00455 INT32 Line,
00456 INT32 StartColumn,
00457 UINT32 *data,
00458 INT32 Length = 1
00459 ) const { return (v_ReadBand(Band, Line, StartColumn, data, Length, CONVMODE_INT32)); }
00460
00461
00462 ERRVALUE ReadBand (
00463 INT32 Band,
00464 INT32 Line,
00465 INT32 StartColumn,
00466 float *data,
00467 INT32 Length = 1
00468 ) const { return (v_ReadBand(Band, Line, StartColumn, data, Length, CONVMODE_Float)); }
00469
00470
00471 ERRVALUE ReadBand (
00472 INT32 Band,
00473 INT32 Line,
00474 INT32 StartColumn,
00475 double *data,
00476 INT32 Length = 1
00477 ) const { return (v_ReadBand(Band, Line, StartColumn, data, Length, CONVMODE_Double)); }
00478
00479
00480 ERRVALUE ReadColumnBand (
00481 INT32 Band,
00482 INT32 Line,
00483 INT32 StartColumn,
00484 void *data,
00485 INT32 Length = 1,
00486 CONVMODE Convert = CONVMODE_None
00487 ) const { return (v_ReadColumnBand(Band, Line, StartColumn, data, Length, Convert)); }
00488
00489
00490 ERRVALUE ReadColumnBand (
00491 INT32 Band,
00492 INT32 Line,
00493 INT32 StartColumn,
00494 INT8 *data,
00495 INT32 Length = 1
00496 ) const { return (v_ReadColumnBand(Band, Line, StartColumn, data, Length, CONVMODE_INT8)); }
00497
00498
00499 ERRVALUE ReadColumnBand (
00500 INT32 Band,
00501 INT32 Line,
00502 INT32 StartColumn,
00503 UINT8 *data,
00504 INT32 Length = 1
00505 ) const { return (v_ReadColumnBand(Band, Line, StartColumn, data, Length, CONVMODE_INT8)); }
00506
00507
00508 ERRVALUE ReadColumnBand (
00509 INT32 Band,
00510 INT32 Line,
00511 INT32 StartColumn,
00512 INT16 *data,
00513 INT32 Length = 1
00514 ) const { return (v_ReadColumnBand(Band, Line, StartColumn, data, Length, CONVMODE_INT16)); }
00515
00516
00517 ERRVALUE ReadColumnBand (
00518 INT32 Band,
00519 INT32 Line,
00520 INT32 StartColumn,
00521 UINT16 *data,
00522 INT32 Length = 1
00523 ) const { return (v_ReadColumnBand(Band, Line, StartColumn, data, Length, CONVMODE_INT16)); }
00524
00525
00526 ERRVALUE ReadColumnBand (
00527 INT32 Band,
00528 INT32 Line,
00529 INT32 StartColumn,
00530 INT32 *data,
00531 INT32 Length = 1
00532 ) const { return (v_ReadColumnBand(Band, Line, StartColumn, data, Length, CONVMODE_INT32)); }
00533
00534
00535 ERRVALUE ReadColumnBand (
00536 INT32 Band,
00537 INT32 Line,
00538 INT32 StartColumn,
00539 UINT32 *data,
00540 INT32 Length = 1
00541 ) const { return (v_ReadColumnBand(Band, Line, StartColumn, data, Length, CONVMODE_INT32)); }
00542
00543
00544 ERRVALUE ReadColumnBand (
00545 INT32 Band,
00546 INT32 Line,
00547 INT32 StartColumn,
00548 float *data,
00549 INT32 Length = 1
00550 ) const { return (v_ReadColumnBand(Band, Line, StartColumn, data, Length, CONVMODE_Float)); }
00551
00552
00553 ERRVALUE ReadColumnBand (
00554 INT32 Band,
00555 INT32 Line,
00556 INT32 StartColumn,
00557 double *data,
00558 INT32 Length = 1
00559 ) const { return (v_ReadColumnBand(Band, Line, StartColumn, data, Length, CONVMODE_Double)); }
00560
00561
00562
00563 ERRVALUE SetNullValue (
00564 INT32 BandNum,
00565 const NULLVALUE* NullValue
00566 ) { return (v_SetNullValue(BandNum, NullValue)); }
00567
00568
00569 ERRVALUE SetCacheSize (
00570 INT32 NumTiles
00571 ) { return (v_SetCacheSize(NumTiles)); }
00572
00573
00574 ERRVALUE SetCacheSize (
00575 CACHEMODE CacheFlags
00576 ) { return (v_SetCacheSize(CacheFlags)); }
00577
00578
00579 ERRVALUE WriteBand (
00580 INT32 Band,
00581 INT32 Line,
00582 INT32 StartColumn,
00583 void *data,
00584 INT32 Length = 1,
00585 CONVMODE Convert = CONVMODE_None
00586 ) { return (v_WriteBand(Band, Line, StartColumn, data, Length, Convert)); }
00587
00588
00589 ERRVALUE WriteBand (
00590 INT32 Band,
00591 INT32 Line,
00592 INT32 StartColumn,
00593 INT8 *data,
00594 INT32 Length = 1
00595 ) { return (v_WriteBand(Band, Line, StartColumn, data, Length, CONVMODE_INT8)); }
00596
00597
00598 ERRVALUE WriteBand (
00599 INT32 Band,
00600 INT32 Line,
00601 INT32 StartColumn,
00602 UINT8 *data,
00603 INT32 Length = 1
00604 ) { return (v_WriteBand(Band, Line, StartColumn, data, Length, CONVMODE_INT8)); }
00605
00606
00607 ERRVALUE WriteBand (
00608 INT32 Band,
00609 INT32 Line,
00610 INT32 StartColumn,
00611 INT16 *data,
00612 INT32 Length = 1
00613 ) { return (v_WriteBand(Band, Line, StartColumn, data, Length, CONVMODE_INT16)); }
00614
00615
00616 ERRVALUE WriteBand (
00617 INT32 Band,
00618 INT32 Line,
00619 INT32 StartColumn,
00620 UINT16 *data,
00621 INT32 Length = 1
00622 ) { return (v_WriteBand(Band, Line, StartColumn, data, Length, CONVMODE_INT16)); }
00623
00624
00625 ERRVALUE WriteBand (
00626 INT32 Band,
00627 INT32 Line,
00628 INT32 StartColumn,
00629 INT32 *data,
00630 INT32 Length = 1
00631 ) { return (v_WriteBand(Band, Line, StartColumn, data, Length, CONVMODE_INT32)); }
00632
00633
00634 ERRVALUE WriteBand (
00635 INT32 Band,
00636 INT32 Line,
00637 INT32 StartColumn,
00638 UINT32 *data,
00639 INT32 Length = 1
00640 ) { return (v_WriteBand(Band, Line, StartColumn, data, Length, CONVMODE_INT32)); }
00641
00642
00643 ERRVALUE WriteBand (
00644 INT32 Band,
00645 INT32 Line,
00646 INT32 StartColumn,
00647 float *data,
00648 INT32 Length = 1
00649 ) { return (v_WriteBand(Band, Line, StartColumn, data, Length, CONVMODE_Float)); }
00650
00651
00652 ERRVALUE WriteBand (
00653 INT32 Band,
00654 INT32 Line,
00655 INT32 StartColumn,
00656 double *data,
00657 INT32 Length = 1
00658 ) { return (v_WriteBand(Band, Line, StartColumn, data, Length, CONVMODE_Double)); }
00659
00660 protected:
00661
00662 static DATATYPE ConvToDATATYPE (
00663 int RvcType,
00664 UINT16 NumBits
00665 );
00666
00667 static UINT32 ConvToRastMode (
00668 CONVMODE value
00669 );
00670
00671 #ifndef GENERATING_DOXYGEN_OUTPUT
00672 static void ImageCallbackFunc (RVC::AnyCallbackStruct *cb, void *data);
00673 #endif // GENERATING_DOXYGEN_OUTPUT
00674
00675 private:
00676 #ifndef GENERATING_DOXYGEN_OUTPUT
00677
00678 virtual ERRVALUE v_GetBandParms (INT32 BandNum, BANDPARMS& BandParms) const = 0;
00679 virtual double v_GetColumnScale () const = 0;
00680 virtual double v_GetLineScale () const = 0;
00681 virtual ERRVALUE v_GetNullValue (INT32 BandNum, NULLVALUE& NullValue) const = 0;
00682 virtual INT32 v_GetNumBands () const = 0;
00683 virtual INT32 v_GetNumColumns () const = 0;
00684 virtual INT32 v_GetNumLines () const = 0;
00685 virtual bool v_HasNullValue (INT32 BandNum) const = 0;
00686 virtual ERRVALUE v_ReadBand (INT32 Band, INT32 Line, INT32 StartColumn, void *data, INT32 Length, CONVMODE Convert) const = 0;
00687 virtual ERRVALUE v_ReadColumnBand (INT32 Band, INT32 Line, INT32 StartColumn, void *data, INT32 Length, CONVMODE Convert) const = 0;
00688 virtual ERRVALUE v_SetCacheSize (INT32 NumTiles) = 0;
00689 virtual ERRVALUE v_SetCacheSize (CACHEMODE CacheFlags) = 0;
00690 virtual ERRVALUE v_SetNullValue (INT32 BandNum, const NULLVALUE* NullValue) = 0;
00691 virtual ERRVALUE v_WriteBand (INT32 Band, INT32 Line, INT32 StartColumn, void *data, INT32 Length, CONVMODE Convert) = 0;
00692 #endif
00693
00694 public:
00695
00696
00697 static UINT16 ConvToRVCTYPE (
00698 DATATYPE type,
00699 UINT16 NumBits
00700 );
00701
00702 };
00703
00704 DEFINE_ENUM_OP_BITWISE(IMAGE::CELLTYPE)
00705 DEFINE_ENUM_OP_BITWISE(IMAGE::PYRAMID);
00706
00707
00708 class IMAGE::BANDPARMS {
00709 public:
00710
00711
00712 BANDPARMS (
00713 ) :
00714 m_CellType(CELLTYPE_Invalid),
00715 m_PackOrder(PACKORDER_MostSigBit)
00716 {}
00717
00718
00719 ~BANDPARMS (
00720 ) {}
00721
00722
00723
00724 UINT16 GetNumBits (
00725 ) const { return (IMAGE::GetNumBitsFromCellType(m_CellType)); }
00726
00727
00728
00729 CELLTYPE GetCellType (
00730 ) const { return (m_CellType); }
00731
00732
00733
00734 DATATYPE GetDataType (
00735 ) const { return (IMAGE::GetDataTypeFromCellType(m_CellType)); }
00736
00737
00738
00739 PACKORDER GetPackOrder (
00740 ) const { return (m_PackOrder); }
00741
00742
00743 void SetCellType (
00744 CELLTYPE CellType
00745 ) { m_CellType = CellType; }
00746
00747
00748 void SetName (
00749 const RVCOBJECTNAME& name
00750 ) { m_Name = name; }
00751
00752
00753 void SetName (
00754 const char *name
00755 ) { m_Name.Assign(name); }
00756
00757
00758 void SetPackOrder (
00759 PACKORDER PackOrder
00760 ) { m_PackOrder = PackOrder; }
00761
00762 private:
00763 #ifndef GENERATING_DOXYGEN_OUTPUT
00764 OBJECTNAME m_Name;
00765 CELLTYPE m_CellType;
00766 PACKORDER m_PackOrder;
00767 #endif // GENERATING_DOXYGEN_OUTPUT
00768 };
00769
00770
00771
00772 class IMAGE::NULLVALUE {
00773 public:
00774
00775
00776 NULLVALUE (
00777 ): m_CellType(CELLTYPE_Invalid)
00778 {
00779 SetDefault();
00780 }
00781
00782
00783 explicit NULLVALUE (
00784 CELLTYPE CellType
00785 ): m_CellType(CellType)
00786 {
00787 SetDefault();
00788 }
00789
00790
00791 void GetValue (
00792 ANYRASTVALUE& value
00793 ) const;
00794
00795
00796
00797 ERRVALUE GetValue (
00798 INT8& value
00799 ) const;
00800
00801
00802
00803 ERRVALUE GetValue (
00804 UINT8& value
00805 ) const;
00806
00807
00808
00809 ERRVALUE GetValue (
00810 INT16& value
00811 ) const;
00812
00813
00814
00815 ERRVALUE GetValue (
00816 UINT16& value
00817 ) const;
00818
00819
00820
00821 ERRVALUE GetValue (
00822 INT32& value
00823 ) const;
00824
00825
00826
00827 ERRVALUE GetValue (
00828 UINT32& value
00829 ) const;
00830
00831
00832
00833 ERRVALUE GetValue (
00834 float& value
00835 ) const;
00836
00837
00838
00839 ERRVALUE GetValue (
00840 double& value
00841 ) const;
00842
00843
00844
00845 ERRVALUE GetValue (
00846 FCOMPLEXRI& value
00847 ) const;
00848
00849
00850
00851 ERRVALUE GetValue (
00852 FCOMPLEXMP& value
00853 ) const;
00854
00855
00856
00857 ERRVALUE GetValue (
00858 DCOMPLEXRI& value
00859 ) const;
00860
00861
00862
00863 ERRVALUE GetValue (
00864 DCOMPLEXMP& value
00865 ) const;
00866
00867
00868
00869 void SetCellType (
00870 CELLTYPE CellType
00871 ) { m_CellType = CellType; SetDefault(); }
00872
00873
00874 void SetDefault (
00875 );
00876
00877
00878 void SetValue (
00879 CELLTYPE CellType,
00880 const ANYRASTVALUE& value
00881 );
00882
00883
00884
00885 ERRVALUE SetValue (
00886 int value
00887 );
00888
00889
00890
00891 ERRVALUE SetValue (
00892 unsigned int value
00893 );
00894
00895
00896
00897 ERRVALUE SetValue (
00898 double value
00899 );
00900
00901
00902
00903 ERRVALUE SetValue (
00904 const FCOMPLEXRI& value
00905 );
00906
00907
00908
00909 ERRVALUE SetValue (
00910 const FCOMPLEXMP& value
00911 );
00912
00913
00914
00915 ERRVALUE SetValue (
00916 const DCOMPLEXRI& value
00917 );
00918
00919
00920
00921 ERRVALUE SetValue (
00922 const DCOMPLEXMP& value
00923 );
00924
00925 private:
00926 #ifndef GENERATING_DOXYGEN_OUTPUT
00927 double m_ValueD;
00928 double m_ValueD2;
00929 UINT8 m_ValueRGB[4];
00930 CELLTYPE m_CellType;
00931
00932 bool IsColor () const;
00933 bool IsComplex () const;
00934 bool IsInt () const;
00935 #endif
00936
00937 };
00938
00939
00940
00941 class IMAGE::OBSERVER : public RVC::OBJECTOBSERVER {
00942 public:
00943 enum TYPE {
00944 TYPE_NullValueChange = 0x00000111
00945 };
00946
00947 explicit OBSERVER (
00948 RVC::IMAGE& object
00949 ) : OBJECTOBSERVER(object) {}
00950
00951 virtual ~OBSERVER (
00952 ) {}
00953
00954 private:
00955
00956 virtual void v_OnNullValueChanged (
00957 const ANYRASTVALUE& NullValue,
00958 bool IsNullUsed
00959 ) { return; }
00960
00961 #ifndef GENERATING_DOXYGEN_OUTPUT
00962 virtual void OnNotifyRaw (UINT32 reason, void *data);
00963 #endif // GENERATING_DOXYGEN_OUTPUT
00964 };
00965
00966 }
00967
00968 #endif