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

📄 jpeg_code.h

📁 实现JPEG编码功能
💻 H
字号:
#include <string>
#include <windows.h>
#include <stdio.h>
#include <malloc.h>
#include <math.h>
#include "jpeg.h"
#include "jpegformat.h"

using namespace std;

class JPEG_CODE
{
public:   //函数声明
	void Invoke(string bmFile, string jpgFile, long Q);//JPEG编码的函数
	BMBUFINFO GetBMBuffSize(FILE* pFile);              // 获取BMP文件输出缓冲区信息
	void GetBMData(FILE* pFile, BYTE* pBuff, BMBUFINFO buffInfo);  //获取图像的数据
	void BGR2YUV111(BYTE* pBuf, BYTE* pYBuff, BYTE* pUBuff, BYTE* pVBuff); //转换色彩空间BGR-YUV,111采样
	void DivBuff(BYTE* pBuf,UINT width,UINT height,UINT xLen,UINT yLen); //将图像数据分块  
	void SetQuantTable(const BYTE* std_QT,BYTE* QT, int Q);     //设置量化表
	void InitQTForAANDCT();                      //为float AA&N IDCT算法初始化量化表
	void WriteSOI(void);                         //写文件开始标记
	void WriteAPP0(void);                        //写APP0段
	void WriteDQT(void);                          //写入DQT段
	void WriteSOF(void);                       //写SOF段
	void WriteDHT(void);                        //写DHT段
	void WriteSOS(void);                         //写SOS段
	void WriteEOI(void);                        //写文件结束的标记
    USHORT Intel2Moto(USHORT val);              // 将高8位和低8位交换
	void WriteByte(BYTE val);                  // 写1字节到文件
	void BuildSTDHuffTab(BYTE* nrcodes,BYTE* stdTab,HUFFCODE* huffCode); // 生成标准Huffman表
	void ProcessDU(FLOAT* lpBuf,FLOAT* quantTab,HUFFCODE* dcHuffTab,HUFFCODE* acHuffTab,SHORT* DC); // 处理DU(数据单元)
	void ProcessData(BYTE* lpYBuf,BYTE* lpUBuf,BYTE* lpVBuf);//处理图像数据FDCT-QUANT-HUFFMAN
	void FDCT(FLOAT* lpBuff);                                 // 8x8的浮点离散余弦变换
	void WriteBits(HUFFCODE huffCode);                     //写二进制流
	void WriteBits(SYM2 sym);                             //重载写二进制流
	void WriteBitsStream(USHORT value,BYTE codeLen);      //写入二进制流
	void RLEComp(SHORT* lpbuf,ACSYM* lpOutBuf,BYTE &resultLen); //游程编码压缩AC系数
	SYM2 BuildSym2(SHORT value);         //将信号的振幅VLI编码,返回编码长度和信号振幅的反码
	BYTE ComputeVLI(SHORT val);           //返回符号的长度
	void BuildVLITable(void);             //生成VLI表
	//////////////////////////////////////////////////////////////////////////
	//私有变量
private:
	
	FILE* pOutFile;
	int buffWidth;
	int buffHeight;
	int imgWidth;
	int imgHeight;	
	
};



⌨️ 快捷键说明

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