/*************************************************************************** * E-Com Technology Ltd. * * ECOMPACS DICOM Network Transport Libraries * Version 0.1 Beta ***************************************************************************/ class IFileBuffer; //class ISeekBuffer; class DICOM_API FrameIterator { public: FrameIterator (); FrameIterator (DICOMImage * Image); ~FrameIterator (); public: bool SetFileName (const char * szFileName); bool SetDicomImage (DICOMImage * Image); public: bool Next (); bool Seek (int FrameIndex); protected: bool NextFrameOfStream (); bool SeekFrameOfStream (int FrameIndex); bool NextFrameOfFile (); bool SeekFrameOfFile (int FrameIndex); public: UINT32 GetFrameLength () { return CurrentFrameLength; } void * Detach (void) { void * tmp = PixelData; PixelData = NULL; return tmp; } void * GetData (void) { return PixelData; } protected: void Init (DICOMImage * pImage); BOOL Decompress (void); BOOL JPEGBaselineDecode (void); BOOL RLEDecode (void); BOOL JP2KLosslessDecode (void); BOOL JP2KLossyDecode (void); BOOL JPEGProc14Decode (void); BOOL JPEGProc14SV1Decode (void); BOOL JPEGExtendedProcDecode (void); BOOL JPEGSpectralProcDecode (void); BOOL JPEGFullProgressDecode (void); protected: UINT32 CurrentFrameLength; UINT32 EveryFrameLength; void * PixelData; UID ImageTransferSyntax; protected: DICOMImage * m_pDicomImage; protected: int Rows; int Columns; int BitsAllocated; int BitsStored; int HighBit; int SamplesPerPixel; UINT32 TagLength; enum TransferSyntaxType { TST_Invalid = 0, TST_LittleEndianImplicit = 1, TST_LittleEndianExplicit, TST_BigEndianExplicit, TST_LittleEndianCompress }; enum PhotometricInterpretation { PI_INVALID = 0, PI_8BITS = 1, PI_16BITS, PI_RGB }; enum TransferSyntaxType TransferSyntaxType; // IFileBuffer * IFB; IFileBuffer * m_ISB; // ISeekBuffer * m_ISB; PhotometricInterpretation m_PI; ULONG * m_pPosition; int m_NbOfFrames; int m_nFrameIndex; bool m_bIsValid; bool m_bIsStream; };