资源简介
这个非常有利于理解解码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++编写的某公司工资管理系统
相关资源
- 国际象棋的qt源代码
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
评论
共有 条评论