DicomImageFrameIterator.hpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /***************************************************************************
  2. * E-Com Technology Ltd.
  3. *
  4. * ECOMPACS DICOM Network Transport Libraries * Version 0.1 Beta
  5. ***************************************************************************/
  6. class IFileBuffer;
  7. //class ISeekBuffer;
  8. class DICOM_API FrameIterator
  9. {
  10. public:
  11. FrameIterator ();
  12. FrameIterator (DICOMImage * Image);
  13. ~FrameIterator ();
  14. public:
  15. bool SetFileName (const char * szFileName);
  16. bool SetDicomImage (DICOMImage * Image);
  17. public:
  18. bool Next ();
  19. bool Seek (int FrameIndex);
  20. protected:
  21. bool NextFrameOfStream ();
  22. bool SeekFrameOfStream (int FrameIndex);
  23. bool NextFrameOfFile ();
  24. bool SeekFrameOfFile (int FrameIndex);
  25. public:
  26. UINT32 GetFrameLength ()
  27. {
  28. return CurrentFrameLength;
  29. }
  30. void * Detach (void)
  31. {
  32. void * tmp = PixelData;
  33. PixelData = NULL;
  34. return tmp;
  35. }
  36. void * GetData (void)
  37. {
  38. return PixelData;
  39. }
  40. protected:
  41. void Init (DICOMImage * pImage);
  42. BOOL Decompress (void);
  43. BOOL JPEGBaselineDecode (void);
  44. BOOL RLEDecode (void);
  45. BOOL JP2KLosslessDecode (void);
  46. BOOL JP2KLossyDecode (void);
  47. BOOL JPEGProc14Decode (void);
  48. BOOL JPEGProc14SV1Decode (void);
  49. BOOL JPEGExtendedProcDecode (void);
  50. BOOL JPEGSpectralProcDecode (void);
  51. BOOL JPEGFullProgressDecode (void);
  52. protected:
  53. UINT32 CurrentFrameLength;
  54. UINT32 EveryFrameLength;
  55. void * PixelData;
  56. UID ImageTransferSyntax;
  57. protected:
  58. DICOMImage * m_pDicomImage;
  59. protected:
  60. int Rows;
  61. int Columns;
  62. int BitsAllocated;
  63. int BitsStored;
  64. int HighBit;
  65. int SamplesPerPixel;
  66. UINT32 TagLength;
  67. enum TransferSyntaxType
  68. {
  69. TST_Invalid = 0,
  70. TST_LittleEndianImplicit = 1,
  71. TST_LittleEndianExplicit,
  72. TST_BigEndianExplicit,
  73. TST_LittleEndianCompress
  74. };
  75. enum PhotometricInterpretation
  76. {
  77. PI_INVALID = 0,
  78. PI_8BITS = 1,
  79. PI_16BITS,
  80. PI_RGB
  81. };
  82. enum TransferSyntaxType TransferSyntaxType;
  83. // IFileBuffer * IFB;
  84. IFileBuffer * m_ISB;
  85. // ISeekBuffer * m_ISB;
  86. PhotometricInterpretation m_PI;
  87. ULONG * m_pPosition;
  88. int m_NbOfFrames;
  89. int m_nFrameIndex;
  90. bool m_bIsValid;
  91. bool m_bIsStream;
  92. };