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_)