资源简介
这个非常有利于理解解码jpg图片的原理,作者是日本人,写的很经典
代码片段和文件信息
/*
* JPEG decoding engine for DCT-baseline
*
* copyrights 2003 by nikq | nikq::club.
*
* history::
* 2003/04/28 | added OSASK-GUI ( by H.Kawai )
* 2003/05/12 | optimized DCT ( 20-bits fixed point etc...) -> line 407-464 ( by I.Tak. )
* 2003/09/27 | PICTURE0.BIN(DLL)梡偵夵憿 ( by 偔乕傒傫 )
* 2003/09/28 | 奺庬僶僌僼傿僋僗仌懡彮偺嵟揔壔 ( by H.Kawai )
*
*/
typedef unsigned char UCHAR;
struct DLL_STRPICENV { int work[16384]; };
typedef struct
{
int elem; //梫慺悢
unsigned short code[256];
unsigned char size[256];
unsigned char value[256];
}HUFF;
typedef struct
{
// SOF
int width;
int height;
// MCU
int mcu_width;
int mcu_height;
int max_hmax_v;
int compo_count;
int compo_id[3];
int compo_sample[3];
int compo_h[3];
int compo_v[3];
int compo_qt[3];
// SOS
int scan_count;
int scan_id[3];
int scan_ac[3];
int scan_dc[3];
int scan_h[3]; // 僒儞僾儕儞僌梫慺悢
int scan_v[3]; // 僒儞僾儕儞僌梫慺悢
int scan_qt[3]; // 検巕壔僥乕僽儖僀儞僨僋僗
// DRI
int interval;
int mcu_buf[32*32*4]; //僶僢僼傽
int *mcu_yuv[4];
int mcu_preDC[3];
// DQT
int dqt[3][64];
int n_dqt;
// DHT
HUFF huff[2][3];
// FILE i/o
unsigned char *fp *fp1;
unsigned long bit_buff;
int bit_remain;
int width_buf;
int base_img[64][64]; // 婎掙夋憸 ( [墶廃攇悢u兾][廲廃攇悢v兾][墶埵憡(M/8)][廲埵憡(N/8)]
/* for dll
JPEG *jpeg = (JPEG *)malloc(sizeof(JPEG) + 256);
*/
int dummy[64];
}JPEG;
/* for 16bit */
#ifndef PIXEL16
#define PIXEL16(r g b) ((r) << 11 | (g) << 5 | (b))
/* 0 <= r <= 31 0 <= g <= 63 0 <= b <= 31 */
#endif
int info_JPEG(struct DLL_STRPICENV *env int *info int size UCHAR *fp);
int decode0_JPEG(struct DLL_STRPICENV *env int size UCHAR *fp int b_type UCHAR *buf int skip);
void jpeg_idct_init(int base_img[64][64]);
int jpeg_init(JPEG *jpeg);
// int jpeg_header(JPEG *jpge);
void jpeg_decode(JPEG *jpeg unsigned char *rgbint b_type);
/* ----------------- start main section ----------------- */
int info_JPEG(struct DLL_STRPICENV *envint *info int size UCHAR *fp0)
{
JPEG *jpeg = (JPEG *) (((int *) env) + 128);
jpeg->fp = fp0;
jpeg->fp1 = fp0 + size;
// if (512 + sizeof (JPEG) > 64 * 1024)
// return 0;
if (jpeg_init(jpeg))
return 0;
// jpeg_header(jpeg);
if (jpeg->width == 0)
return 0;
info[0] = 0x0002;
info[1] = 0x0000;
info[2] = jpeg->width;
info[3] = jpeg->height;
/* OK */
return 1;
}
int decode0_JPEG(struct DLL_STRPICENV *envint size UCHAR *fp0 int b_type UCHAR *buf int skip)
{
JPEG *jpeg = (JPEG *) (((int *) env) + 128);
jpeg->fp = fp0;
jpeg->fp1 = fp0 + size;
jpeg_idct_init(jpeg->base_img);
jpeg_init(jpeg);
// jpeg_header(jpeg);
// if (jpeg->width == 0)
// return 8;
/* decode0偱偼info偟偰偐傜屇偽傟傞偺偱丄偙傟偼側偄 */
jpeg->width_buf = skip / (b_type
- 上一篇:防火墙源码用C++编写
- 下一篇:用c++编写的某公司工资管理系统
相关资源
- 使用光电传感器的测速小车C语言程序
- c语言哈夫曼树课程设计
- 用贪心算法求解哈密顿回路
- 平衡二叉树的c语言实现
- kdtree的源码C语言版
- C语言选修课系统设计
- TDOA定位算法C语言代码
- C语言编写的GZIP压缩算法含工程文件,
- Thinking in C++ 源代码
- C语言程序300集(pdf,清晰)
- GPS卫星定位-实时位置计算程序-VC++源
- 维吉尼亚加密解密的C语言实现
- 超全的网络爬虫资料含源代码c++
- rsa签名 C语言实现
- 学生成绩管理系统C语言、C++6.0 控制台
- C语言实现计算乘法逆元
- DH算法代码实现
- 0-1背包问题-递归算法 c语言实现
- 常用数据校验源代码CRC8 CRC16 和校验
- c语言银行系统源代码(改进版)
- C语言程序课程设计商品进销存管理程
- vc++编写的界面源代码
- 991“数据结构与C语言程序设计”考试
- IIR滤波器 ccs程序,C语言和汇编
- c语言实现字典顺序排序
- 用C语言编写的《订餐管理系统》
- 功能非常全的数字图像处理程序含源
- c语言随机生成迷宫和走迷宫图形版含
- 人工智能实验报告以及C语言源程序
- C语言实现模糊控制
评论
共有 条评论