实验原理
JPEG编码的过程如下图所示。解码是编码的逆过程。
JPEG文件解码流程:
①读入文件的相关信息
②初步了解图像数据流的结构
③颜色分量单元的内部解码
④直流系数的差分编码
⑤反量化&反zig-zag编码
⑥反离散余弦变换
JPEG文件格式:
实验流程
1.读取文件
2.解析文件
SOI、APP0、DQT、SOF0、DHT、SOS
3.根据每个分量的水平和垂直采样因子计算最小编码单元的大小,并得到每个最小编码单元内8×8宏块的个数
4.对每个最小编码单元解码
5.解析到EOI结束
6.将Y、Cb、Cr转换为所需的色彩空间保存
代码分析
main函数
int main(int argc, char *argv[])
{
int output_format = TINYJPEG_FMT_YUV420P;
char *output_filename, *input_filename;
clock_t start_time, finish_time;
unsigned int duration;
int current_argument;
int benchmark_mode = 0;
Q_table = fopen("Q_table.txt","w"); //量化表、DC AC表
DC_table = fopen("DC_table.yuv","w");
AC_table = fopen("AC_table.yuv","w");
#if TRACE
p_trace = fopen(TRACEFILE,"w"); //路径文件
if (p_trace == NULL)
{
printf("trace file open error!");
}
#endif
if (argc < 3)
usage();
current_argument = 1;
while (1)
{
if (strcmp</