FaxFile.h
上传用户:glass0516
上传日期:2010-01-11
资源大小:104k
文件大小:4k
- /*****************************************************************************
- * RelayFax Open Source Project
- * Copyright 1996-2004 Alt-N Technologies, Ltd.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted only as authorized by the RelayFax Open
- * Source License. A copy of this license is available in file LICENSE
- * in the top-level directory of the distribution.
- *
- * RelayFax is a registered trademark of Alt-N Technologies, Ltd.
- *
- * Individual files and/or contributed packages may be copyright by
- * other parties and subject to additional restrictions.
- *****************************************************************************/
- #ifndef FAXFILE_H
- #define FAXFILE_H
- #include "CommPort.h"
- #include "ECMBuffer.h"
- #include "tiffio.h"
- #include "memfile.h"
- class CFaxFile
- {
- public:
- CFaxFile();
- virtual ~CFaxFile();
- void SetFileName( LPCSTR szFilename ) { m_sFaxFile.assign( szFilename ); };
- void SelectEncoding( int nEncoding );
- int ReadFirstHeader(void);
- bool ReadPage( bool bUseECM, int nClass1Speed, WORD wMinLineChars, bool bClassTwoZero = false, bool bClassTwo = false );
- bool ReadNextHeader(void);
- bool ReadBadFrames( int nClass1Speed );
- void Close(void);
- void SetImageRes( bool bHiRes );
- void SetImageWidth( int nWidth );
- void SetImageLength( int nLength );
- void IncrementImageLength( int n = 1 );
- void SetImageCompression( int nCompression );
- void SetT4Options( int nOptions );
- void SetECMFrameSize( int nSize ) { m_nECMFrameSize = nSize; }
- void IncrementPageCount(void) { m_PageCount++; };
- bool WriteFileHeader(void);
- bool WriteBuffer( unsigned char* szBuffer, unsigned int nBytes, bool bFlipBytes = true );
- bool WriteECMBuffer( unsigned char* szBuffer, unsigned int nBytes );
- bool WriteIFD(void);
- int WriteIfd (void);
- bool IsECMBlockGood( int nFrameCount ) { return m_ECMBuffer.IsECMBlockGood(nFrameCount); };
- void NextECMBlock(void);
- void RedoECMBlock(void);
- void AddFCDHeader(void);
- void AddRCPFrames(void);
- void AddByte( unsigned char b, bool bCalcFCS );
- void AddBit( unsigned char bit );
- void AddFlag( void );
- void Clear(void);
- unsigned char* GetSeqMap(void) { return m_ECMBuffer.GetSeqMap(); };
- char* GetPageData( void ) { return (char*)m_PageBuffer; };
- unsigned int GetPageBytes(void) { return m_PageBufferSize; };
- unsigned int GetPageCount(void) { return m_PageCount; };
- bool GetPartialPage(void) { return m_bPartialPage; };
- unsigned int GetFrameCount(void) { return m_ECMBuffer.GetHighestSeq(); };
- unsigned int GetBlockCount(void) { return m_nBlockCount; };
- int GetSendEncoding(void) { return m_nSendEncoding; };
- void SetSendEncoding( int nEnc ) { m_nSendEncoding = nEnc; };
- bool MorePages(void) { return TIFFLastDirectory( m_tiff ) == 0; };
- unsigned int GetTotalPageSize( void ) { return m_MemFile.GetDataLen(); };
- int GetECMFrameSize( void ) { return m_nECMFrameSize; }
- bool IsHiRes(void);
- static BYTE s_LeadZero[256];
- static BYTE s_TrailZero[256];
- static unsigned char s_FlipTable[];
- protected:
- static const int s_WTree [][2];
- static const int s_BTree [][2];
- static const int s_TwoTree [][2];
- string m_sFaxFile;
- uint16 bitspersample;
- uint32 width, length, rowsperstrip;
- uint16 fillorder;
- uint32 g3opts;
- uint16 compression;
- float xres, yres;
- unsigned char* m_PageBuffer;
- unsigned char* m_PagePtr;
- unsigned int m_PageBufferSize;
- unsigned int m_PageCount;
- TIFF* m_tiff;
- unsigned long int lastifd;
- bool m_bFoundStartOfPage;
- bool m_bFoundStartOfFrame;
- bool m_bFoundEndOfPage;
- unsigned long nZcnt;
- unsigned long nRTCCnt;
- unsigned long nBitCntr;
- unsigned long nOctet;
- BYTE nZeroBitDeleteCntr;
- bool m_bFlagFound;
- bool m_bPartialPage;
- unsigned int m_nPartialPagePos;
- unsigned int m_nBlockCount;
- CECMBuffer m_ECMBuffer;
- int m_nECMFrameSize;
- void reverse(void *pointer,int countdown);
- int ReadIfd(void);
- bool ProcessECMFrame( void );
- void CountGroup3TiffLines(void);
- void CountGroup4TiffLines(void);
- int m_nSendEncoding;
- bool m_bGotData;
- CMemFile m_MemFile;
- bool m_bFileHasData;
- };
- #endif // FAXFILE_H