00001
00051 #ifndef INC_MIE_IMAGE_H
00052 #define INC_MIE_IMAGE_H
00053
00054 #ifndef INC_MIE_GEOSPATIAL_H
00055 #include <mie/geospatial.h>
00056 #endif
00057
00058 #ifndef INC_RVC_IMAGE_H
00059 #include <rvc/image.h>
00060 #endif
00061
00062
00063 namespace MIE {
00064
00065
00066
00067
00068 class JOB_IMAGE : public JOB_GEOSPATIAL {
00069 public:
00071 enum MIEINTERLEAVE {
00072 MIEINTERLEAVE_Line = 0,
00073 MIEINTERLEAVE_Band = 1,
00074 MIEINTERLEAVE_Pixel = 2
00075 };
00076
00077 enum FLIP {
00078 FLIP_None = 0,
00079 FLIP_Vert = 1,
00080 FLIP_Horz = 2,
00081 FLIP_Both = 3
00082 };
00083
00084 JOB_IMAGE (
00085 const FORMAT& format,
00086 const SETTINGS& settings
00087 );
00088
00089 virtual ~JOB_IMAGE ();
00090
00092 static void CopyBits (
00093 const UINT8 *sbuf,
00094 int soff,
00095 UINT8 *dbuf,
00096 int doff,
00097 int len
00098 );
00099
00100
00102 void ScaleBuffer (
00103 void* buf
00104 );
00105
00107 static void SwapBytes (
00108 UINT8* buf,
00109 int len,
00110 int numbits
00111 );
00112
00120 void GetBandPIL (
00121 UINT8* dbuf,
00122 const UINT8* sbuf,
00123 int band,
00124 int outcols
00125 );
00126
00129 static void GetBandPIL (
00130 UINT8* dbuf,
00131 const UINT8* sbuf,
00132 int band,
00133 int outcols,
00134 int numbands,
00135 int InterleaveFactor,
00136 int numbits
00137 );
00138
00140 static ERRVALUE ImportGeorefArcWorld (
00141 SIMPLE_ARRAY<CTRLPOINT3>& CtrlPoints,
00142 const FILEPATH& filepath,
00143 int rastlins,
00144 int rastcols
00145 );
00146
00147 static ERRVALUE ImportGeorefMapInfoTAB (
00148 SIMPLE_ARRAY<CTRLPOINT3>& points,
00149 SPATREF::COORDREFSYS& crs,
00150 const FILEPATH& filepath
00151 );
00152
00154 INT32 GetHeaderBytes (
00155 ) const { return m_HeaderBytes; }
00156
00158 INT32 GetLineHdrBytes (
00159 ) const { return m_LineHdrBytes; }
00160
00162 INT32 GetLineTrailBytes (
00163 ) const { return m_LineTrailBytes; }
00164
00166 INT32 GetBandHdrBytes (
00167 ) const { return m_BandHdrBytes; }
00168
00170 INT32 GetBandNum (
00171 ) const { return m_BandNum; }
00172
00174 INT32 GetBandTrailBytes (
00175 ) const { return m_BandTrailBytes; }
00176
00178 INT32 GetInterleaveHdrBytes (
00179 ) const { return m_InterleaveHdrBytes; }
00180
00182 INT32 GetInterleaveTrailBytes (
00183 ) const { return m_InterleaveTrailBytes; }
00184
00186 INT32 GetNumCols (
00187 ) const { return m_NumCols; }
00188
00190 INT32 GetNumLins (
00191 ) const { return m_NumLins; }
00192
00194 INT32 GetNumBands (
00195 ) const { return m_NumBands; }
00196
00198 INT32 GetNumBits (
00199 ) const { return m_NumBits; }
00200
00201 RVC::IMAGE::CELLTYPE GetCellType (
00202 ) const { return m_CellType; }
00203
00205 RVC::IMAGE::DATATYPE GetDataType (
00206 ) const { return m_DataType; }
00207
00209 MIEINTERLEAVE GetInterleaveType (
00210 ) const { return m_InterleaveType; }
00211
00213 INT32 GetInterleaveFactor (
00214 ) const { return m_InterleaveFactor; }
00215
00217 BYTEORDER GetByteOrder (
00218 ) const { return m_ByteOrder; }
00219
00221 INT32 GetLinePad (
00222 ) const { return m_LinePad; }
00223
00225 double GetNullValue (
00226 ) const { return m_NullValue; }
00227
00228 FLIP GetFlip (
00229 ) const { return m_flip; }
00230
00234 double GetScale (
00235 ) const { return m_scale; }
00236
00237 double GetColScale (
00238 ) const { return m_ColScale; }
00239
00240 double GetLinScale (
00241 ) const { return m_LinScale; }
00242
00244 bool GetDoLink (
00245 ) const { return m_bDoLink; }
00246
00248 bool HasNull (
00249 ) const { return m_bHasNullValue; }
00250
00252 INT32 GetInitCol (
00253 ) const { return m_InitCol; }
00254
00256 INT32 GetInitLin (
00257 ) const { return m_InitLin; }
00258
00260 INT32 GetLastCol (
00261 ) const { return m_LastCol; }
00262
00264 INT32 GetLastLin (
00265 ) const { return m_LastLin; }
00266
00268 double GetDataScale (
00269 ) const { return m_DataScale;}
00270
00272 double GetDataOffset (
00273 ) const { return m_DataOffset; }
00274
00276 bool GetNoCheckSpace (
00277 ) const { return m_bNoCheckSpace; }
00278
00279 ERRVALUE ImportGeneric (
00280 const FILEPATH& filepath
00281 ) { return v_ImportGeneric(filepath); }
00282
00284 void SetHeaderBytes (
00285 INT32 value
00286 ) { m_HeaderBytes = value; }
00287
00289 void SetLineHdrBytes (
00290 INT32 value
00291 ) { m_LineHdrBytes = value; }
00292
00294 void SetLineTrailBytes (
00295 INT32 value
00296 ) { m_LineTrailBytes = value; }
00297
00299 void SetBandHdrBytes (
00300 INT32 value
00301 ) { m_BandHdrBytes = value; }
00302
00304 void SetBandNum (
00305 INT32 bandnum
00306 ) { m_BandNum = bandnum; }
00307
00309 void SetBandTrailBytes (
00310 INT32 value
00311 ) { m_BandTrailBytes = value; }
00312
00314 void SetInterleaveHdrBytes (
00315 INT32 value
00316 ) { m_InterleaveHdrBytes = value; }
00317
00319 void SetInterleaveTrailerBytes (
00320 INT32 value
00321 ) { m_InterleaveTrailBytes = value; }
00322
00324 void SetNumCols (
00325 INT32 value
00326 ) { m_NumCols = value; }
00327
00329 void SetNumLins (
00330 INT32 value
00331 ) { m_NumLins = value; }
00332
00334 void SetNumBands (
00335 INT32 value
00336 ) { m_NumBands = value; }
00337
00339 void SetNumBits (
00340 INT32 value
00341 );
00342
00344 void SetCellType (
00345 RVC::IMAGE::CELLTYPE value
00346 ) {
00347 m_DataType = (RVC::IMAGE::GetDataTypeFromCellType(value));
00348 SetNumBits(RVC::IMAGE::GetNumBitsFromCellType(value));
00349 m_CellType = value;
00350 }
00351
00353 void SetDataType (
00354 RVC::IMAGE::DATATYPE value
00355 );
00356
00358 void SetInterleaveType (
00359 MIEINTERLEAVE value
00360 ) { m_InterleaveType = value; }
00361
00363 void SetInterleaveFactor (
00364 INT32 value
00365 ) { m_InterleaveFactor = value; }
00366
00368 void SetByteOrder (
00369 BYTEORDER value
00370 ) { m_ByteOrder = value; }
00371
00373 void SetLinePad (
00374 INT32 value
00375 ) { m_LinePad = value; }
00376
00378 void SetNullValue (
00379 double value
00380 ) { m_NullValue = value; m_bHasNullValue = true; }
00381
00382 void SetFlip (
00383 FLIP value
00384 ) { m_flip = value; }
00385
00390 void SetScale (
00391 double value
00392 ) { m_scale = value; }
00393
00394 void SetColScale (
00395 double value
00396 ) { m_ColScale = value; }
00397
00398 void SetLinScale (
00399 double value
00400 ) { m_LinScale = value; }
00401
00403 void SetDoLink (
00404 bool value
00405 ) { m_bDoLink = value; }
00406
00408 void SetHasNull (
00409 bool value
00410 ) { m_bHasNullValue = value; }
00411
00413 void SetInitCol (
00414 INT32 value
00415 ) { m_InitCol = value; }
00416
00418 void SetInitLin (
00419 INT32 value
00420 ) { m_InitLin = value; }
00421
00423 void SetLastCol (
00424 INT32 value
00425 ) { m_LastCol = value; }
00426
00428 void SetLastLin (
00429 INT32 value
00430 ) { m_LastLin = value; }
00431
00433 void SetDataScale (
00434 double value
00435 ) { m_DataScale = value;}
00436
00438 void SetDataOffset (
00439 double value
00440 ) { m_DataOffset = value; }
00441
00443 void SetNoCheckSpace (
00444 bool value
00445 ) { m_bNoCheckSpace = value; }
00446
00447 protected:
00448
00449
00455 virtual ERRVALUE v_ImportBegin (
00456 const RVC::OBJITEM& DestObj
00457 );
00458
00470 virtual ERRVALUE v_ImportEnd (
00471 RVC::OBJITEM& DestObj
00472 );
00473
00474 private:
00475 virtual ERRVALUE v_ImportGeneric (
00476 const FILEPATH& filepath
00477 ) = 0;
00478
00479 INT32 m_HeaderBytes;
00480 INT32 m_LineHdrBytes;
00481 INT32 m_LineTrailBytes;
00482 INT32 m_BandHdrBytes;
00483 INT32 m_BandNum;
00484 INT32 m_BandTrailBytes;
00485 INT32 m_InterleaveHdrBytes;
00486 INT32 m_InterleaveTrailBytes;
00487 INT32 m_NumCols;
00488 INT32 m_NumLins;
00489 INT32 m_NumBands;
00490 INT32 m_NumBits;
00491 RVC::IMAGE::DATATYPE m_DataType;
00492 RVC::IMAGE::CELLTYPE m_CellType;
00493 MIEINTERLEAVE m_InterleaveType;
00494 INT32 m_InterleaveFactor;
00495 BYTEORDER m_ByteOrder;
00496 INT32 m_LinePad;
00497 FLIP m_flip;
00498 double m_scale;
00499 double m_ColScale;
00500 double m_LinScale;
00501 bool m_bDoLink;
00502 bool m_bHasNullValue;
00503 INT32 m_InitCol;
00504 INT32 m_InitLin;
00505 INT32 m_LastCol;
00506 INT32 m_LastLin;
00507 double m_DataScale;
00508 double m_DataOffset;
00509 double m_NullValue;
00510 bool m_bNoCheckSpace;
00511
00512 };
00513
00514 }
00515
00516 #endif