现在的位置: 首页 > 综合 > 正文

根据网上搜到的代码,自己整理的jpeg解码程序

2013年08月28日 ⁄ 综合 ⁄ 共 975字 ⁄ 字号 评论关闭

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亮度,CrCb彩色信息)构成,Y通常是每个DU采样一次,而CrCb一般是2x2DU)采样一次,这样的格式是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, PutMCUYUV转换成RGB,显示

7.       检查EOI标记,是否结束,否到第4步继续。是,结束

 

【上篇】
【下篇】

抱歉!评论已关闭.