EZW編碼器源代碼
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評論(0)
EZW編碼器源代碼
該源代碼包含有6個(gè)文件:
EZW.H - EZW編碼器頭文件
EZW.C - EZW編碼器文件
MATRIX2D.H?? MATRIX2D.C - 編碼器數(shù)據(jù)結(jié)果定義和數(shù)據(jù)操作
FIFO.H? FIFO.C - 掃描方式定義:先入先出原則
LIST.H? LIST.C - 零樹結(jié)構(gòu)定義和操作
UNEZW.C - EZW解碼器
這里,讀者重點(diǎn)要掌握的是EZW.C和LIST.C中的內(nèi)容,充分理解零樹的概念。
--------------
EZW編碼器
#define debug
#include "ezw.h"
#include "fifo.h"
#include "list.h"
#include "matrix2d.h"
#include
#include
#include
//工作矩陣matrix_2d *M;
//誤差值char error;
//用于統(tǒng)計(jì)某一數(shù)據(jù)流中1和0的個(gè)數(shù)int zeroes, ones;
//編碼數(shù)據(jù)流的輸出文件FILE *ezw_file;
//輸出字節(jié)及編碼標(biāo)志位unsigned char output_byte, mask;
//建立一個(gè)數(shù)據(jù)流輸出的文件頭ezw_file_header header;
void load_data(matrix_2d *m)
{?int row, col;
?for (row=0; row<8; row++)
?{for (col=0; col<8; col++)
??{//進(jìn)行工作矩陣的賦值m->m[row][col] = example[row][col];
??}}}
/* * Puts a bit in the output stream.*/
void put_bit(char bit)
{//如果放入的比特為是1,統(tǒng)計(jì)1的個(gè)數(shù);反之統(tǒng)計(jì)0的個(gè)數(shù)
?if (bit=='1')
?{output_byte |= mask;
??ones++;}
?else zeroes++;?mask >>= 1;
??if (mask==0)
?{fwrite(&output_byte,sizeof(output_byte),1,ezw_file);
??output_byte = 0;??mask = 0x80;?}}
/* * Puts dominant-pass and subordinate-pass codes in the output stream. */
void output_code(int code)
{//對于一個(gè)已經(jīng)量化且編碼后的數(shù)據(jù),來判斷它的類型。其類型有6種,正如在頭文件中定
非常好我支持^.^
(5) 100%
不好我反對
(0) 0%