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