資源簡介
讀取一個256*256的圖像,并對其進行LZW編碼,最后輸出字典以及相應的碼字序列。壓縮包里面包含C++源代碼以及實驗報告。

代碼片段和文件信息
#include
#include
#include
#include
using?namespace?std;
//查找字典中有沒有條目I
bool?search(?vector>&?dict?vector&?I?vector::size_type&?index?);
int?main(?)
{
//------------------------------定義變量------------------------------------
//打開文件的指針
FILE?*fp;
//灰度值大小
int?grey_level?=?0;
//定義輸入序列
vector?input;
//定義輸出序列
vector?output;
//定義字典
vector>?dict;
//字典索引序號
vector::size_type?index;
//定義短語詞條I
vector?I;
//定義新加入的字符x
vector?x;
//-----------------------------讀取圖片-------------------------------------
//打開圖像矩陣文件
if(?(?fp?=?fopen(?“LENA256.IMG“?“rb“?)?)?==?NULL?){
printf(?“cannot?open?file\n“?);
exit(?0?);
}
int?size;
cout?<“The?program?is?not?efficient.“?< <“Please?input?the?number?of?the?pixels(1-65536):?“;
cin?>>?size;
//構造灰度值序列
for(?int?i?=?0;?i?<=?size;?i++?){
grey_level?=?fgetc(?fp?);
if(?grey_level?==?EOF?)?
break;
input.push_back(?grey_level?);
}
//關閉圖像矩陣文件
fclose(?fp?);
//-------------------------------字典初始化------------------------------------
vector?temp;
temp.push_back(?0?);
for(?int?i?=?0;?i?256;?i++?){
temp[?0?]?=?i;
dict.push_back(?temp?);
}
//------------------------------構造碼字和字典---------------------------------
x.push_back(?input.back(?)?);
input.pop_back(?);
while(?!input.empty(?)?){
I.push_back(?x[?0?]?);
while(?1?){
//積累數據
search(?dict?I?index?);
I.push_back(?input.back(?)?);
x[?0?]?=?input.back(?);
input.pop_back(?);
//判斷轉移條件
if(?!search(?dict?I?index?)?)?break;
if(?input.empty(?)?)?break;
}
//輸出新碼字和輸出編碼結果
output.push_back(?index?);
if(?!input.empty(?)?)?dict.push_back(?I?);
I.clear(?);
}
//-----------------------------輸出碼字和字典----------------------------------
cout?<“The?dictionary?is?as?follows:?“?< for(?vector::size_type?i?=?0;?i? cout?<“index:?“?< for(?vector::size_type?j?=?0;?j? cout?< }
cout?< }
cout?<“\nThe?output?is:?\n“;
for(?vector::size_type?i?=?0;?i? cout?< if(?(?i?+?1?)?%?10?==?0?&&?i?!=?0?)?
cout?< }
cout?<“\n\nThe?input?size?is:?“?< cout?<“The?size?of?output?is:?“?<
return?0;
}
bool?search(?vector>&?dict?vector&?I?vector::size_type&?index?)
{
for(?vector::size_type?i?=?0;?i? if(?I?==?dict[?i?]?){?
index?=?i;
return?true;
}
return?false;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2945??2011-12-23?16:13??LZW.cpp
?????文件?????294620??2011-12-24?00:13??作業五.docx
-----------?---------??----------?-----??----
???????????????297565????????????????????2
評論
共有 條評論