jpeg file decode

所属分类:图形图象
开发工具:Visual C++
文件大小:138KB
下载次数:163
上传日期:2004-06-29 17:17:59
上 传 者zhangtao
说明:  jpeg解码原码
(jpeg decode source file)

文件列表:
cjpeg.cpp (16324, 2000-12-19)
cjpeg.h (2478, 2000-12-16)
idct.cpp (39236, 2000-12-17)
jpeg.pdf (95587, 1998-03-29)
jpeg.txt (20642, 2000-10-03)
showjpeg.cpp (10249, 2000-12-17)
showjpeg.exe (69632, 2000-12-19)

jpeg文件解码器类使用说明 本解码器类支持普通jpeg文件格式,这也是目前大多数jpeg文件所采用的格式,此格式主要特点是数 据精度为8位,采用Huffman编码的普通DCT帧(不支持扩展串行和递进模式及数学编码)。本解码器类的 IDCT算法采用三种模式,分别是浮点解码、定点整数解码和定点整数MMX优化解码,您可根据具体情况选择。 1.使用授权 本原代码文档包括下列文件: cjpeg.cpp 解码器类原程序 idct.cpp 解码器类原程序,idct解码函数 cjpeg.h 解码器类头文件 jpeg.pdf jpeg文件格式说明 jpeg.txt jpeg文件格式说明 readme.txt 自述文件 showjpeg.exe 使用本原代码的例子程序 showjpeg.cpp 例子程序原文件 如果您要在各种媒体刊载、引用本文档,请不要对本文档内容进行任何修改。如果您在自己的编程中 引用本文档内容,可对引用内容进行修改。作为学习和交流目的,本文档的使用是免费的,如果您直接或 间接将本文档用于商业用途,请在使用前与我联系,获得同意后方可使用。在您引用本文档时如能注明出 处,并通过下面方式通知本人一下,本人将非常高兴! 您在最终使用时请到下面网址再下载一次,以便保证版本最新!对于jpeg格式更多特性的支持将不断 完善。如果您发现错误,请通过下面地址通知我一下。 联系方式: e-mail:cproom@163.net http://cproom.yeah.net 通讯地址:陕西省西安市太白南路202号(骊山微电子公司)陈鹏(收) 邮编  :710065 电话  :(029)-8234582 2.jpeg文件解码器类参考 (1)结构类型说明 typedef struct //图象数据的分量参数(分量指色彩通道) { UINT v,h; //此分量的垂直和水平方向的采样要素 UINT qtID; //此分量使用的量化表ID }COMPONENT; typedef struct //图象数据参数结构 { UINT imgWidth,imgHeight;//图象的宽和高 UINT bufWidth,bufHeight;//图象数据缓冲区的宽和高 //数据缓冲区的宽和高一定是8或16的整数倍,所以与 //图象的宽和高不一定一样,图象总是位于数据缓冲区 //的左上角,这一点一定要注意! int comNum; //图象分量数,单色灰度图象为1,RGB彩色图象为3 BYTE *image[5]; //包含图象数据的缓冲区指针,实际包含数据的单元为 //image[0]--image[comNum-1] }JPEG_IMAGE_INFO; (2)公有数据成员 无! (3)私有数据成员 BOOL error; //内部错误标志 UINT errorCode; //内部错误号(未完善) BOOL opened; //内部状态标志 UINT imgWidth,imgHeight; //图象的宽和高 UINT bufWidth,bufHeight; //图象数据缓冲区的宽和高 UINT numOfCOM; //图象分量数 UINT ri; //重新开始间隔 UINT qt[4][***]; //量化表 CHuffmanTable htDC[4]; //用于DC解码的Huffman表 CHuffmanTable htAC[4]; //用于AC解码的Huffman表 COMPONENT com[6]; //分量参数结构数组 UINT maxH,maxV; //最大水平和垂直采样要素 UINT unitNumH,unitNumV; //水平和垂直方向的单元数 BYTE *image[5]; //包含图象数据的缓冲区指针,实际包含数据的单元为 //image[0]--image[comNum-1] void (CJpeg::* pIdctFunc)(short*,BYTE*); //指向IDCT解码函数的指针 (4)私有成员函数 void init(); 功能 :对数据成员初始化 参数 :无 返回值:无 void idctFloat(short* coef_block,BYTE *output_buf); 功能 :通过浮点运算进行IDCT解码 参数 :coef:通过Huffman解码和量化后的系数块 output_buf:输出缓冲区 返回值:无 void idctInt (short* coef_block,BYTE *output_buf); 功能 :通过定点整数运算进行IDCT解码 参数 :coef:通过Huffman解码和量化后的系数块 output_buf:输出缓冲区 返回值:无 void domidct8x8llmW(short *inptr,int*,BYTE* outptr); 功能 :通过定点整数运算进行IDCT解码,MMX优化 参数 :inptr:通过Huffman解码和量化后的系数块 output_buf:输出缓冲区 返回值:无 void idctMMX(short* coef_block,BYTE *output_buf); 功能 :通过定点整数运算进行IDCT解码,MMX优化,内部调用domidct8x8llmW() 参数 :coef:通过Huffman解码和量化后的系数块 output_buf:输出缓冲区 返回值:无 void storeBlock(UINT comID,UINT num,BYTE *block,BYTE *img); 功能 :将解码后的数据存入图象缓冲区,待进一步处理 参数 :comID:所存数据所属的分量号 num:所存数据是本分量的第几块数据 block:所存数据缓冲区 img:输出到的图象缓冲区 返回值:无 void YCbCrToRGB(); 功能 :将图象缓冲区由YCbCr格式转换为RGB格式 参数 :无 返回值:无 BOOL readQTable(ifstream &ifs); 功能 :从文件流中读取量化表信息 参数 :ifs:用于读取数据的文件流引用 返回值:成功返回TRUE,失败返回FALSE BOOL readHTable(ifstream &ifs); 功能 :从文件流中读取Huffman表 参数 :ifs:用于读取数据的文件流引用 返回值:成功返回TRUE,失败返回FALSE BOOL readSOF0(ifstream &ifs); 功能 :从文件流中读取SOF0段 参数 :ifs:用于读取数据的文件流引用 返回值:成功返回TRUE,失败返回FALSE BOOL readRI(ifstream &ifs); 功能 :从文件流中读取重新开始标志段 参数 :ifs:用于读取数据的文件流引用 返回值:成功返回TRUE,失败返回FALSE BOOL readSOS(ifstream &ifs); 功能 :从文件流中读取SOS段,包括后面的数据 参数 :ifs:用于读取数据的文件流引用 返回值:成功返回TRUE,失败返回FALSE (5)公有成员函数 CJpeg(); 功能 :构造函数,构造一个空对象,以后用open()函数打开文件 参数 :无 返回值:无 说 明:内部调用init()函数 CJpeg(LPCSTR fileName,UINT idctMode); 功能 :构造函数,构造一个对象并同时打开一个文件 参数 :fileName:要打开的jpeg图象文件名 idctMode:IDCT解码模式(IDCT_FLOAT,IDCT_INT,IDCT_MMX) 返回值:无 说 明:内部调用open()函数,参看open()函数 ~CJpeg(); 功能 :析构函数 参数 :无 返回值:无 说 明:内部调用close()函数 BOOL operator!(); 功能 :判断构造是否成功 参数 :无 返回值:为真则构造成功,为假则失败。 说 明:在构造函数调用之后,一定要调用此函数确定构造是否成功。 BOOL open(LPCSTR fileName,UINT idctMode); 功能 :打开文件 参数 :fileName:要打开的jpeg图象文件名 idctMode:IDCT解码模式(IDCT_FLOAT,IDCT_INT,IDCT_MMX) 返回值:成功返回TRUE,失败返回FALSE 说 明:IDCT_FLOAT 浮点解码 (速度29,质量优秀) IDCT_INT 定点整数解码 (速度21,质量好) IDCT_MMX 定点整数MMX优化解码 (速度17,质量良) 以上数据仅供参考,其实图象质量基本看不出差别 void getImageInfo(JPEG_IMAGE_INFO* info); 功能 :取得图象信息用于显示 参数 :info:指向图象信息结构的指针 返回值:无 说 明:无 void close(); 功能 :将状态有打开切换到关闭,以便打开新的文件 参数 :无 返回值:无 说 明:释放内存,可以再次用open()打开新的文件。 UINT getLastError(); 功能 :取得最后一次成员函数调用后的错误代码 参数 :无 返回值:错误代码 说 明:初步可用,不完善 3.jpeg类用到的Huffman树类参考 本Huffman树类是用于jpeg类的特殊情况,不具有通用性。 (1)结构类型说明 typedef struct NODE //Huffman树的节点结构 { NODE *lNode; //指向左节点的指针 NODE *rNode; //指向右节点的指针 BOOL isLeave; //是否是叶子节点 unsigned char code; //编码所代表的值 }NODE; typedef struct //内部使用,过于具体,无介绍必要 { unsigned char *stream; UINT bufIdx; UINT bitIdx; UINT remain; }DECODE_PARAM; (2)公有数据成员 无 (3)私有数据成员 NODE root; //根节点 (4)私有成员函数 无 (5)公有成员函数 CHuffmanTable(); 功能 :构造函数 参数 :无 返回值:无 说 明:无 ~CHuffmanTable(); 功能 :析构函数 参数 :无 返回值:无 说 明:释放内存 BOOL addNode(UINT len,unsigned char c); 功能 :加入节点 参数 :len:加入的节点所表示的Huffman码长度 c:Huffman码所代表的值 返回值:成功返回TRUE,失败返回FALSE 说 明:递归调用addNode(NODE* node,UINT len,unsigned char c) BOOL addNode(NODE* node,UINT len,unsigned char c); 功能 :加入节点 参数 :node:当前节点 len:剩余位长度 c:Huffman码所代表的值 返回值:成功返回TRUE,失败返回FALSE 说 明:递归函数 void clear(); 功能 :释放Huffman树所占内存 参数 :无 返回值:无 说 明:递归调用clearNode(NODE* node),被CJpeg类的close()函数调用 void clearNode(NODE* node); 功能 :释放当前节点及其子节点所占内存 参数 :node:当前节点 返回值:无 说 明:递归函数 BOOL deCode(DECODE_PARAM* pa,unsigned char *p); 功能 :Huffman解码 参数 :pa:解码数据流参数 p:用于存放返回的编码值的unsigned char型数据指针 返回值:成功返回TRUE,失败返回FALSE 说 明:无 4.gifinfo.exe使用说明 功能:依次循环显示所在目录下的所有以.jpg和.jpeg为扩展名的文件,间隔为一秒 用法:无参数 说明:无 “全文完”

近期下载者

相关文件


收藏者