www.pudn.com > dip_1_1_bmp2jpeg.rar > Jpeg.h


// Jpeg.h: interface for the CJpeg class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_JPEG_H__2835EF17_2235_11D2_8C8B_006097ADB77E__INCLUDED_) 
#define AFX_JPEG_H__2835EF17_2235_11D2_8C8B_006097ADB77E__INCLUDED_ 
 
#if _MSC_VER >= 1000 
#pragma once 
#endif // _MSC_VER >= 1000 
#include"global.h" 
struct SET 
{ 
	BYTE C[3]; // Y, Cb, Cr  
}; 
 
struct DQT 
{ 
	BYTE Q[64]; // Qantization Table  
}; 
 
struct DHT 
{ 
	BOOL Flag; //  
	int Num; //  
	WORD *HUFFCODE; //  
	BYTE *HUFFSIZE; //  
	BYTE *HUFFVAL;  //  
	WORD MAXCODE[17]; //  
	WORD MINCODE[17]; //  
	int VALPTR[17]; //  
	int *PT; // VALUE INDEX 
}; 
 
struct FRAMEHEADER 
{ 
	WORD Y; //  
	WORD X; //  
	BYTE Nf; //  
	BYTE C[3]; // 
	BYTE H[3]; //  Horizontal Sampling Factor 
	BYTE V[3]; //  Vertical Sampling Factor 
	BYTE Tq[3]; // 
}; 
 
struct SCANHEADER 
{ 
	BYTE Ns; //  
	BYTE Cs[3]; //  
	BYTE Td[3]; //  DC Huffman Table  
	BYTE Ta[3]; // AC Huffman Table  
	BYTE Ss; 
	BYTE Se; 
	BYTE Ah; 
	BYTE Al; 
}; 
 
typedef struct{ 
	BYTE *base; 
	BYTE *top; 
	int stacksize; 
}SqStack; 
 
class CJpeg   
{ 
public: 
 
	// JPEG File Load // 
	void LoadJPG(LPSTR FileName); // JPEG File Load	 
	void FindSOI(); // Start of Image  
	void FindDQT(); // Quantization Table 
	void FindDHT();	// Huffman Table 
	void FindSOF(); // Frame Header 
	void FindSOS(); // Scan Header 
	void FindETC(); // DRI(Define Restart Interval)   
	void Decode();  //  
	void DecodeMCU(int mx, int my); // MCU 
	void DecodeDU(int N); // 8x8 Data Unit 
	void IDCT(); // Inverse DCT 
	void Zigzag(); // Zigzag DU 
	void DecodeAC(int Th); // DU, AC 
	void DecodeDC(int Th); // DU, DC 
	short Extend(WORD V, BYTE T); //  
	WORD Receive(BYTE SSSS); //  
	BYTE hDecode(int Th); //  
	BYTE NextByte(); //  
	WORD NextBit(); //  
	void ConvertYUV2RGB();  
	 
	 
	// JPEG File Save //	 
	void SaveJPG(LPSTR FileName, int Width, int Height, BYTE *pp,int qp); // JPEG  
	void PutSOI(HFILE hFile); // Start of Image  
	void PutDQT(HFILE hFile); // Quantizatino Table 
	void PutDHT(HFILE hFile); // Huffmann Table 
	void PutSOF(HFILE hFile, int Width, int Height); // FrameHeader 
	void PutSOS(HFILE hFile); // ScanHeader 
	void PutEOI(HFILE hFile); // End of Image  
	void ShotBit(BYTE Bit); //  
	void ChargeCode(WORD Code, int Size ); // Size Code 
	void EncodeDU(short *pos, BOOL Flag, int bWidth); // 8x8 Block 
	void hEncode(int bWidth, int bHeight); //  
	BYTE GetCategory(short V); // 	 
	void Zigzag2(); // Zigzag 
	void DCT(short *pos, int bWidth, BOOL Flag,int qp); // DCZigzag  Quantization  
 
	int GetHeight(); //  
	int GetWidth();	//  
	 
	WORD Ri; // Restart Interval 
	int m_rWidth; //  
	int m_rHeight; //  
	BYTE * pByte; // NextByte() 
	 
	int cnt; //  
	 
	short *Y;  // Save Y Buffer 
	short *Cb; // Save Cb Buffer 
	short *Cr; // Save Cr Buffer 
 
	SET *MCU; // MCU  
	 
	BYTE Hmax; // Maximum Horizontal Sampling Factor 
	BYTE Vmax; // Maximum Vertical Sampling Factor 
	 
	BYTE * m_pData;	//  
	BYTE * m_pBuf; //  
	int m_Index; //  
	DQT TbQ[20]; // Quantization Table 
	DHT TbH[20]; // Huffman Table 
	short ZZ[64]; // 8x8 Block  
	FRAMEHEADER FrameHeader; // FrameHeader  
	SCANHEADER ScanHeader; // ScanHeader  
	short PrevDC[3]; // DC  Predictor 
 
	 
	CJpeg(); 
	virtual ~CJpeg(); 
 
}; 
 
#endif // !defined(AFX_JPEG_H__2835EF17_2235_11D2_8C8B_006097ADB77E__INCLUDED_)