EZW編碼器源代碼
EZW編碼器源代碼
該源代碼包含有6個文件:
EZW.H - EZW編碼器頭文件
EZW.C - EZW編碼器文件
MATRIX2D.H?? MATRIX2D.C - 編碼器數據結果定義和數據操作
FIFO.H? FIFO.C - 掃描方式定義:先入先出原則
LIST.H? LIST.C - 零樹結構定義和操作
UNEZW.C - EZW解碼器
這里,讀者重點要掌握的是EZW.C和LIST.C中的內容,充分理解零樹的概念。
--------------
EZW編碼器
#define debug
#include "ezw.h"
#include "fifo.h"
#include "list.h"
#include "matrix2d.h"
#include
#include
#include
//工作矩陣matrix_2d *M;
//誤差值char error;
//用于統計某一數據流中1和0的個數int zeroes, ones;
//編碼數據流的輸出文件FILE *ezw_file;
//輸出字節及編碼標志位unsigned char output_byte, mask;
//建立一個數據流輸出的文件頭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++)
??{//進行工作矩陣的賦值m->m[row][col] = example[row][col];
??}}}
/* * Puts a bit in the output stream.*/
void put_bit(char bit)
{//如果放入的比特為是1,統計1的個數;反之統計0的個數
?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)
{//對于一個已經量化且編碼后的數據,來判斷它的類型。其類型有6種,正如在頭文件中定
非常好我支持^.^
(5) 100%
不好我反對
(0) 0%