⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stream.h

📁 source code: Covert TXT to PDF
💻 H
📖 第 1 页 / 共 2 页
字号:
  virtual int lookChar();  virtual int getRawChar();  virtual GString *getPSFilter(char *indent);  virtual GBool isBinary(GBool last = gTrue);private:  StreamPredictor *pred;	// predictor  int early;			// early parameter  GBool eof;			// true if at eof  int inputBuf;			// input buffer  int inputBits;		// number of bits in input buffer  struct {			// decoding table    int length;    int head;    Guchar tail;  } table[4097];  int nextCode;			// next code to be used  int nextBits;			// number of bits in next code word  int prevCode;			// previous code used in stream  int newChar;			// next char to be added to table  Guchar seqBuf[4097];		// buffer for current sequence  int seqLength;		// length of current sequence  int seqIndex;			// index into current sequence  GBool first;			// first code after a table clear  GBool processNextCode();  void clearTable();  int getCode();};//------------------------------------------------------------------------// RunLengthStream//------------------------------------------------------------------------class RunLengthStream: public FilterStream {public:  RunLengthStream(Stream *strA);  virtual ~RunLengthStream();  virtual StreamKind getKind() { return strRunLength; }  virtual void reset();  virtual int getChar()    { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); }  virtual int lookChar()    { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); }  virtual GString *getPSFilter(char *indent);  virtual GBool isBinary(GBool last = gTrue);private:  char buf[128];		// buffer  char *bufPtr;			// next char to read  char *bufEnd;			// end of buffer  GBool eof;  GBool fillBuf();};//------------------------------------------------------------------------// CCITTFaxStream//------------------------------------------------------------------------struct CCITTCodeTable;class CCITTFaxStream: public FilterStream {public:  CCITTFaxStream(Stream *strA, int encodingA, GBool endOfLineA,		 GBool byteAlignA, int columnsA, int rowsA,		 GBool endOfBlockA, GBool blackA);  virtual ~CCITTFaxStream();  virtual StreamKind getKind() { return strCCITTFax; }  virtual void reset();  virtual int getChar()    { int c = lookChar(); buf = EOF; return c; }  virtual int lookChar();  virtual GString *getPSFilter(char *indent);  virtual GBool isBinary(GBool last = gTrue);private:  int encoding;			// 'K' parameter  GBool endOfLine;		// 'EndOfLine' parameter  GBool byteAlign;		// 'EncodedByteAlign' parameter  int columns;			// 'Columns' parameter  int rows;			// 'Rows' parameter  GBool endOfBlock;		// 'EndOfBlock' parameter  GBool black;			// 'BlackIs1' parameter  GBool eof;			// true if at eof  GBool nextLine2D;		// true if next line uses 2D encoding  int row;			// current row  int inputBuf;			// input buffer  int inputBits;		// number of bits in input buffer  short *refLine;		// reference line changing elements  int b1;			// index into refLine  short *codingLine;		// coding line changing elements  int a0;			// index into codingLine  int outputBits;		// remaining ouput bits  int buf;			// character buffer  short getTwoDimCode();  short getWhiteCode();  short getBlackCode();  short lookBits(int n);  void eatBits(int n) { inputBits -= n; }};//------------------------------------------------------------------------// DCTStream//------------------------------------------------------------------------// DCT component infostruct DCTCompInfo {  int id;			// component ID  int hSample, vSample;		// horiz/vert sampling resolutions  int quantTable;		// quantization table number  int prevDC;			// DC coefficient accumulator};struct DCTScanInfo {  GBool comp[4];		// comp[i] is set if component i is				//   included in this scan  int numComps;			// number of components in the scan  int dcHuffTable[4];		// DC Huffman table numbers  int acHuffTable[4];		// AC Huffman table numbers  int firstCoeff, lastCoeff;	// first and last DCT coefficient  int ah, al;			// successive approximation parameters};// DCT Huffman decoding tablestruct DCTHuffTable {  Guchar firstSym[17];		// first symbol for this bit length  Gushort firstCode[17];	// first code for this bit length  Gushort numCodes[17];		// number of codes of this bit length  Guchar sym[256];		// symbols};class DCTStream: public FilterStream {public:  DCTStream(Stream *strA);  virtual ~DCTStream();  virtual StreamKind getKind() { return strDCT; }  virtual void reset();  virtual int getChar();  virtual int lookChar();  virtual GString *getPSFilter(char *indent);  virtual GBool isBinary(GBool last = gTrue);  Stream *getRawStream() { return str; }private:  GBool progressive;		// set if in progressive mode  GBool interleaved;		// set if in interleaved mode  int width, height;		// image size  int mcuWidth, mcuHeight;	// size of min coding unit, in data units  int bufWidth, bufHeight;	// frameBuf size  DCTCompInfo compInfo[4];	// info for each component  DCTScanInfo scanInfo;		// info for the current scan  int numComps;			// number of components in image  int colorXform;		// need YCbCr-to-RGB transform?  GBool gotAdobeMarker;		// set if APP14 Adobe marker was present  int restartInterval;		// restart interval, in MCUs  Guchar quantTables[4][64];	// quantization tables  int numQuantTables;		// number of quantization tables  DCTHuffTable dcHuffTables[4];	// DC Huffman tables  DCTHuffTable acHuffTables[4];	// AC Huffman tables  int numDCHuffTables;		// number of DC Huffman tables  int numACHuffTables;		// number of AC Huffman tables  Guchar *rowBuf[4][32];	// buffer for one MCU (non-progressive mode)  int *frameBuf[4];		// buffer for frame (progressive mode)  int comp, x, y, dy;		// current position within image/MCU  int restartCtr;		// MCUs left until restart  int restartMarker;		// next restart marker  int eobRun;			// number of EOBs left in the current run  int inputBuf;			// input buffer for variable length codes  int inputBits;		// number of valid bits in input buffer  void restart();  GBool readMCURow();  void readScan();  GBool readDataUnit(DCTHuffTable *dcHuffTable,		     DCTHuffTable *acHuffTable,		     int *prevDC, int data[64]);  GBool readProgressiveDataUnit(DCTHuffTable *dcHuffTable,				DCTHuffTable *acHuffTable,				int *prevDC, int data[64]);  void decodeImage();  void transformDataUnit(Guchar *quantTable,			 int dataIn[64], Guchar dataOut[64]);  int readHuffSym(DCTHuffTable *table);  int readAmp(int size);  int readBit();  GBool readHeader();  GBool readBaselineSOF();  GBool readProgressiveSOF();  GBool readScanInfo();  GBool readQuantTables();  GBool readHuffmanTables();  GBool readRestartInterval();  GBool readAdobeMarker();  GBool readTrailer();  int readMarker();  int read16();};//------------------------------------------------------------------------// FlateStream//------------------------------------------------------------------------#define flateWindow          32768    // buffer size#define flateMask            (flateWindow-1)#define flateMaxHuffman         15    // max Huffman code length#define flateMaxCodeLenCodes    19    // max # code length codes#define flateMaxLitCodes       288    // max # literal codes#define flateMaxDistCodes       30    // max # distance codes// Huffman code table entrystruct FlateCode {  Gushort len;			// code length, in bits  Gushort val;			// value represented by this code};struct FlateHuffmanTab {  FlateCode *codes;  int maxLen;};// Decoding info for length and distance code wordsstruct FlateDecode {  int bits;			// # extra bits  int first;			// first length/distance};class FlateStream: public FilterStream {public:  FlateStream(Stream *strA, int predictor, int columns,	      int colors, int bits);  virtual ~FlateStream();  virtual StreamKind getKind() { return strFlate; }  virtual void reset();  virtual int getChar();  virtual int lookChar();  virtual int getRawChar();  virtual GString *getPSFilter(char *indent);  virtual GBool isBinary(GBool last = gTrue);private:  StreamPredictor *pred;	// predictor  Guchar buf[flateWindow];	// output data buffer  int index;			// current index into output buffer  int remain;			// number valid bytes in output buffer  int codeBuf;			// input buffer  int codeSize;			// number of bits in input buffer  int				// literal and distance code lengths    codeLengths[flateMaxLitCodes + flateMaxDistCodes];  FlateHuffmanTab litCodeTab;	// literal code table  FlateHuffmanTab distCodeTab;	// distance code table  GBool compressedBlock;	// set if reading a compressed block  int blockLen;			// remaining length of uncompressed block  GBool endOfBlock;		// set when end of block is reached  GBool eof;			// set when end of stream is reached  static int			// code length code reordering    codeLenCodeMap[flateMaxCodeLenCodes];  static FlateDecode		// length decoding info    lengthDecode[flateMaxLitCodes-257];  static FlateDecode		// distance decoding info    distDecode[flateMaxDistCodes];  void readSome();  GBool startBlock();  void loadFixedCodes();  GBool readDynamicCodes();  void compHuffmanCodes(int *lengths, int n, FlateHuffmanTab *tab);  int getHuffmanCodeWord(FlateHuffmanTab *tab);  int getCodeWord(int bits);};//------------------------------------------------------------------------// EOFStream//------------------------------------------------------------------------class EOFStream: public FilterStream {public:  EOFStream(Stream *strA);  virtual ~EOFStream();  virtual StreamKind getKind() { return strWeird; }  virtual void reset() {}  virtual int getChar() { return EOF; }  virtual int lookChar() { return EOF; }  virtual GString *getPSFilter(char *indent)  { return NULL; }  virtual GBool isBinary(GBool last = gTrue) { return gFalse; }};//------------------------------------------------------------------------// FixedLengthEncoder//------------------------------------------------------------------------class FixedLengthEncoder: public FilterStream {public:  FixedLengthEncoder(Stream *strA, int lengthA);  ~FixedLengthEncoder();  virtual StreamKind getKind() { return strWeird; }  virtual void reset();  virtual void close();  virtual int getChar();  virtual int lookChar();  virtual GString *getPSFilter(char *indent) { return NULL; }  virtual GBool isBinary(GBool last = gTrue) { return gFalse; }  virtual GBool isEncoder() { return gTrue; }private:  int length;  int count;};//------------------------------------------------------------------------// ASCIIHexEncoder//------------------------------------------------------------------------class ASCIIHexEncoder: public FilterStream {public:  ASCIIHexEncoder(Stream *strA);  virtual ~ASCIIHexEncoder();  virtual StreamKind getKind() { return strWeird; }  virtual void reset();  virtual void close();  virtual int getChar()    { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); }  virtual int lookChar()    { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); }  virtual GString *getPSFilter(char *indent) { return NULL; }  virtual GBool isBinary(GBool last = gTrue) { return gFalse; }  virtual GBool isEncoder() { return gTrue; }private:  char buf[4];  char *bufPtr;  char *bufEnd;  int lineLen;  GBool eof;  GBool fillBuf();};//------------------------------------------------------------------------// ASCII85Encoder//------------------------------------------------------------------------class ASCII85Encoder: public FilterStream {public:  ASCII85Encoder(Stream *strA);  virtual ~ASCII85Encoder();  virtual StreamKind getKind() { return strWeird; }  virtual void reset();  virtual void close();  virtual int getChar()    { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); }  virtual int lookChar()    { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); }  virtual GString *getPSFilter(char *indent) { return NULL; }  virtual GBool isBinary(GBool last = gTrue) { return gFalse; }  virtual GBool isEncoder() { return gTrue; }private:  char buf[8];  char *bufPtr;  char *bufEnd;  int lineLen;  GBool eof;  GBool fillBuf();};//------------------------------------------------------------------------// RunLengthEncoder//------------------------------------------------------------------------class RunLengthEncoder: public FilterStream {public:  RunLengthEncoder(Stream *strA);  virtual ~RunLengthEncoder();  virtual StreamKind getKind() { return strWeird; }  virtual void reset();  virtual void close();  virtual int getChar()    { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr++ & 0xff); }  virtual int lookChar()    { return (bufPtr >= bufEnd && !fillBuf()) ? EOF : (*bufPtr & 0xff); }  virtual GString *getPSFilter(char *indent) { return NULL; }  virtual GBool isBinary(GBool last = gTrue) { return gFalse; }  virtual GBool isEncoder() { return gTrue; }private:  char buf[131];  char *bufPtr;  char *bufEnd;  char *nextEnd;  GBool eof;  GBool fillBuf();};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -