SimpleJPEG
主要分以下几个程序:
1. Simplejpeg.c 解码主程序
2. simplejpeg.h 主程序对应的头文件
3. simplejpeg.common.h 与应用程序共用的头文件,接口定义
4. simplejpeg_dll.h DLL函数输出的头文件
建立SimpleJPEG项目
1. 新建一个project,选好路径、项目名称,下一步
2. 在接下去的窗口选择dll,Empty Project,然后点击Finish即可
3. 在SimpleJPEG solution中添加源文件和头文件。
4. 直接按F7即可编译生成DLL.
JPEG的基本原理
在JPEG中,处理的对象是一个8x8点阵大小的块,称为DU(Data Unit)。8x8原始数据经过RLE,Huffman编码后,称为一个Data Unit。
彩色图形由(Y亮度,Cr,Cb彩色信息)构成,Y通常是每个DU采样一次,而CrCb一般是2x2(DU)采样一次,这样的格式是4:1:1。也有的JPG是逐点采样的,称为4:4:4。
以4:1:1为例,根据一定顺序,存放如下:MCU=YDU YDU YDU YDU CbDU CrDU。这样就描述了一块16x16的图形。
以4:4:4为例,MCU=YDU,CbDU,CrDU,只有8x8大。
对于灰度图片,MCU = YDU,无色彩信息。
简单说一下JPEG文件解码。
解码程序先从JPG文件中读出采样系数,这样就知道了MCU的大小,算出整个图像有几个MCU。解码程序再循环逐个对MCU解码,一直到检查EOI标记。对于每个MCU,按正规的次序解出每个DU,然后组合,转换成(R,G,B)就ok了。
流程如下:
1. 得到JPEG数据,长度,变量初始化。
2. InitTag读文件头信息,读出采样系数
3. Initialize Fast IDCT,初始化Inverse DCT
4. 解码得到一个MCU块,DecodeMCUBlock
5. 取得YUV信息,放入MCU=YDU YDU …… CbDU CrDU
6. 交给应用程序显示PutMCU, PutMCU将YUV转换成RGB,显示
7. 检查EOI标记,是否结束,否到第4步继续。是,结束