📄 jpeg_code.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 + -