00001
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112 #ifndef INC_RVC_HYPSPECT_H
00113 #define INC_RVC_HYPSPECT_H
00114
00115 #ifndef INC_RVC_IMAGE_H
00116 #include <rvc/image.h>
00117 #endif
00118
00119 #ifndef INC_MI32_DATETIME_H
00120 #include <mi32/datetime.h>
00121 #endif
00122
00123 namespace RVC {
00124
00125 #ifndef GENERATING_DOXYGEN_OUTPUT
00126 class HYPERSPECTRALHANDLE;
00127 #endif // GENERATING_DOXYGEN_OUTPUT
00128
00129 class HYPERSPECTRAL : public RVC::IMAGE {
00130 public:
00131 #ifndef GENERATING_DOXYGEN_OUTPUT
00132 class MAKEPARMS;
00133 #endif // GENERATING_DOXYGEN_OUTPUT
00134
00136 HYPERSPECTRAL (
00137 );
00138
00140 HYPERSPECTRAL (
00141 const RVC::HYPERSPECTRAL& rhs
00142 );
00143
00145 virtual ~HYPERSPECTRAL (
00146 );
00147
00149 RVC::HYPERSPECTRAL& operator= (
00150 const RVC::HYPERSPECTRAL& rhs
00151 );
00152
00155 INT32 GetNumPrimaryVectors (
00156 ) const {return (m_NumVectors); }
00157
00160 INT32 GetNumTileColumns (
00161 ) const {return (m_TileColumns);}
00162
00165 INT32 GetNumTileLines (
00166 ) const {return (m_TileLines);}
00167
00170 INT32 GetNumXTiles (
00171 ) const {return (m_XTiles);}
00172
00175 INT32 GetNumYTiles (
00176 ) const {return (m_YTiles);}
00177
00180 INT32 GetTileSizeBytes (
00181 ) const {return (m_TileSize);}
00182
00184 ERRVALUE Make (
00185 const RVC::OBJECT& parent,
00186 const RVC::DESCRIPTOR& Descriptor,
00187 MAKEPARMS& MakeParms,
00188 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00189 );
00190
00192 ERRVALUE Make (
00193 RVC::OBJITEM& ObjItem,
00194 MAKEPARMS& MakeParms,
00195 const char* Source = 0,
00196 const CREDENTIALS* Credentials RVC_DEFAULT_CREDENTIALS
00197 );
00198
00200 ERRVALUE ReadBandLossy (
00201 INT32 Band,
00202 INT32 Line,
00203 INT32 StartColumn,
00204 void *data,
00205 INT32 Length = 1,
00206 CONVMODE Convert = CONVMODE_None
00207 ) const;
00208
00210 ERRVALUE ReadBandLossy (
00211 INT32 Band,
00212 INT32 Line,
00213 INT32 StartColumn,
00214 INT8 *data,
00215 INT32 Length = 1
00216 ) const { return (ReadBandLossy(Band, Line, StartColumn, data, Length, CONVMODE_INT8)); }
00217
00219 ERRVALUE ReadBandLossy (
00220 INT32 Band,
00221 INT32 Line,
00222 INT32 StartColumn,
00223 UINT8 *data,
00224 INT32 Length = 1
00225 ) const { return (ReadBandLossy(Band, Line, StartColumn, data, Length, CONVMODE_INT8)); }
00226
00228 ERRVALUE ReadBandLossy (
00229 INT32 Band,
00230 INT32 Line,
00231 INT32 StartColumn,
00232 INT16 *data,
00233 INT32 Length = 1
00234 ) const { return (ReadBandLossy(Band, Line, StartColumn, data, Length, CONVMODE_INT16)); }
00235
00237 ERRVALUE ReadBandLossy (
00238 INT32 Band,
00239 INT32 Line,
00240 INT32 StartColumn,
00241 UINT16 *data,
00242 INT32 Length = 1
00243 ) const { return (ReadBandLossy(Band, Line, StartColumn, data, Length, CONVMODE_INT16)); }
00244
00246 ERRVALUE ReadBandLossy (
00247 INT32 Band,
00248 INT32 Line,
00249 INT32 StartColumn,
00250 INT32 *data,
00251 INT32 Length = 1
00252 ) const { return (ReadBandLossy(Band, Line, StartColumn, data, Length, CONVMODE_INT32)); }
00253
00255 ERRVALUE ReadBandLossy (
00256 INT32 Band,
00257 INT32 Line,
00258 INT32 StartColumn,
00259 UINT32 *data,
00260 INT32 Length = 1
00261 ) const { return (ReadBandLossy(Band, Line, StartColumn, data, Length, CONVMODE_INT32)); }
00262
00264 ERRVALUE ReadBandLossy (
00265 INT32 Band,
00266 INT32 Line,
00267 INT32 StartColumn,
00268 float *data,
00269 INT32 Length = 1
00270 ) const { return (ReadBandLossy(Band, Line, StartColumn, data, Length, CONVMODE_Float)); }
00271
00273 ERRVALUE ReadBandLossy (
00274 INT32 Band,
00275 INT32 Line,
00276 INT32 StartColumn,
00277 double *data,
00278 INT32 Length = 1
00279 ) const { return (ReadBandLossy(Band, Line, StartColumn, data, Length, CONVMODE_Double)); }
00280
00281 ERRVALUE WriteAverageLine (
00282 INT32 Line,
00283 INT32 StartColumn,
00284 const void* data,
00285 INT32 Length,
00286 CONVMODE Convert = CONVMODE_None
00287 );
00288
00289 ERRVALUE WriteBandLine (
00290 INT32 Line,
00291 INT32 StartColumn,
00292 const void* data,
00293 INT32 Length,
00294 CONVMODE Convert = CONVMODE_None
00295 );
00296
00297 ERRVALUE WriteClassLine (
00298 INT32 Line,
00299 INT32 StartColumn,
00300 const void* data,
00301 INT32 Length,
00302 CONVMODE Convert = CONVMODE_None
00303 );
00304
00305 ERRVALUE WriteResidualLine (
00306 INT32 Band,
00307 INT32 Line,
00308 INT32 StartColumn,
00309 const void* data,
00310 INT32 Length,
00311 CONVMODE Convert = CONVMODE_None
00312 );
00313
00314 private:
00315 #ifndef GENERATING_DOXYGEN_OUTPUT
00316
00318 virtual ERRVALUE v_CloseObject ();
00319 virtual RVC::OBJTYPE v_GetDftObjectType () const;
00320 virtual bool v_IsObjectOpen () const;
00321 virtual ERRVALUE v_OpenObject (OPENMODE OpenMode, MDLGPARENT parent, const CREDENTIALS* Credentials);
00322
00324 virtual void v_GetExtents (DRECT3D &extents) const;
00325 virtual void v_GetScale (double& xscale, double& yscale) const;
00326 virtual double v_GetZScale () const;
00327 virtual double v_GetZOffset () const;
00328 virtual bool v_HasCapability (int Capability) const;
00329 virtual void v_SetScale (double xscale, double yscale);
00330 virtual void v_SetZScale (double zscale);
00331 virtual void v_SetZOffset (double zoffset);
00332
00334 virtual ERRVALUE v_GetBandParms (INT32 BandNum, BANDPARMS& BandParms) const;
00335 virtual CELLTYPE v_GetCellType () const;
00336 virtual double v_GetColumnScale () const;
00337 virtual double v_GetLineScale () const;
00338 virtual ERRVALUE v_GetNullValue (INT32 BandNum, NULLVALUE& NullValue) const;
00339 virtual INT32 v_GetNumBands () const;
00340 virtual INT32 v_GetNumColumns () const;
00341 virtual INT32 v_GetNumLines () const;
00342 virtual bool v_HasNullValue (INT32 BandNum) const;
00343 virtual ERRVALUE v_ReadBand (INT32 Band, INT32 Line, INT32 StartColumn, void *data, INT32 Length, CONVMODE Convert) const;
00344 virtual ERRVALUE v_ReadColumnBand (INT32 Band, INT32 Line, INT32 StartColumn, void *data, INT32 Length, CONVMODE Convert) const;
00345 virtual ERRVALUE v_SetCacheRect (const LRECT2D& Rect);
00346 virtual ERRVALUE v_SetCacheSize (INT32 NumTiles);
00347 virtual ERRVALUE v_SetCacheSize (CACHEMODE CacheFlags);
00348 virtual ERRVALUE v_SetNullValue (INT32 BandNum, const NULLVALUE* NullValue);
00349 virtual ERRVALUE v_WriteBand (INT32 Band, INT32 Line, INT32 StartColumn, const void *data, INT32 Length, CONVMODE Convert);
00350
00351 HYPERSPECTRALHANDLE* m_HyperSpectralID;
00352 INT32 m_NumLines;
00353 INT32 m_NumColumns;
00354 INT32 m_NumBands;
00355 INT32 m_NumVectors;
00356 CELLTYPE m_CellType;
00357 INT32 m_TileLines;
00358 INT32 m_TileColumns;
00359 INT32 m_XTiles;
00360 INT32 m_YTiles;
00361 INT32 m_TileSize;
00362 #endif // GENERATING_DOXYGEN_OUTPUT
00363 };
00364
00365
00366 class HYPERSPECTRAL::MAKEPARMS {
00367 public:
00369 MAKEPARMS (
00370 INT32 NumLines,
00371 INT32 NumColumns,
00372 INT32 NumBands,
00373 INT32 NumVectors,
00374 IMAGE::CELLTYPE CellType
00375 ) :
00376 m_NumLines(NumLines),
00377 m_NumColumns(NumColumns),
00378 m_CellType(CellType),
00379 m_TileLines(0),
00380 m_TileColumns(0),
00381 m_IsLossy(false),
00382 m_LineScale(0.0),
00383 m_ColumnScale(0.0),
00384 m_NumBands(NumBands),
00385 m_NumVectors(NumVectors)
00386 { }
00387
00389 MAKEPARMS (
00390 const HYPERSPECTRAL& 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_IsLossy(false),
00399 m_LineScale(0.0),
00400 m_ColumnScale(0.0),
00401 m_NumBands(Template.GetNumBands()),
00402 m_NumVectors(Template.GetNumPrimaryVectors())
00403 {
00404 Template.GetScale(m_ColumnScale, m_LineScale);
00405 }
00406
00409 IMAGE::CELLTYPE GetCellType (
00410 ) const {return (m_CellType);}
00411
00413 const DATETIME& GetCollectionDate (
00414 ) const { return (m_CollectionDate); }
00415
00418 double GetColumnScale (
00419 ) const {return (m_ColumnScale); }
00420
00423 IMAGE::DATATYPE GetDataType (
00424 ) const {return (IMAGE::GetDataTypeFromCellType(m_CellType));}
00425
00428 INT32 GetDftTileSize (
00429 ) const;
00430
00433 double GetLineScale (
00434 ) const {return (m_LineScale); }
00435
00438 INT32 GetNumBands (
00439 ) const {return (m_NumBands); }
00440
00443 UINT16 GetNumBits (
00444 ) const {return (IMAGE::GetNumBitsFromCellType(m_CellType));}
00445
00448 INT32 GetNumColumns (
00449 ) const {return (m_NumColumns);}
00450
00453 INT32 GetNumLines (
00454 ) const {return (m_NumLines);}
00455
00458 INT32 GetNumPrimaryVectors (
00459 ) const {return (m_NumVectors); }
00460
00463 const OBJECTNAME& GetSensorName (
00464 ) const {return (m_SensorName);}
00465
00467 void GetTileSize (
00468 INT32& TileLines,
00469 INT32& TileColumns
00470 ) const { TileLines = m_TileLines; TileColumns = m_TileColumns; }
00471
00474 bool IsLossy (
00475 ) const { return (m_IsLossy); }
00476
00478 void SetCellType (
00479 CELLTYPE CellType
00480 ) {m_CellType = CellType;}
00481
00483 void SetCollectionDate (
00484 const DATETIME& Date
00485 ) { m_CollectionDate = Date; }
00486
00488 void SetColumnScale (
00489 double scale
00490 ) { m_ColumnScale = scale; }
00491
00493 void SetIsLossy (
00494 bool bIsLossy
00495 ) { m_IsLossy = bIsLossy; }
00496
00498 void SetLineScale (
00499 double scale
00500 ) { m_LineScale = scale; }
00501
00503 void SetNumBands (
00504 INT32 NumBands
00505 ) { m_NumBands = NumBands; }
00506
00508 void SetNumColumns (
00509 INT32 NumColumns
00510 ) {m_NumColumns = NumColumns;}
00511
00513 void SetNumLines (
00514 INT32 NumLines
00515 ) {m_NumLines = NumLines;}
00516
00518 void SetNumPrimaryVectors (
00519 INT32 NumVectors
00520 ) { m_NumVectors = NumVectors; }
00521
00524 void SetSensorName (
00525 const OBJECTNAME& name
00526 ) { m_SensorName = name; }
00527
00529 void SetTileSize (
00530 INT32 TileLines,
00531 INT32 TileColumns
00532 ) { m_TileLines = TileLines; m_TileColumns = TileColumns; }
00533
00534 private:
00535 #ifndef GENERATING_DOXYGEN_OUTPUT
00536
00537 INT32 m_NumLines;
00538 INT32 m_NumColumns;
00539 CELLTYPE m_CellType;
00540 INT32 m_TileLines;
00541 INT32 m_TileColumns;
00542 bool m_IsLossy;
00543 double m_LineScale;
00544 double m_ColumnScale;
00545 INT32 m_NumBands;
00546 INT32 m_NumVectors;
00547 RVC::OBJECTNAME m_SensorName;
00548 DATETIME m_CollectionDate;
00549
00550 friend class HYPERSPECTRAL;
00551 #endif // GENERATING_DOXYGEN_OUTPUT
00552 };
00553
00554 }
00555
00556 #endif