資源簡介
內有exe可執行文件,可直接運行來觀看效果,本人用VS2008編寫

代碼片段和文件信息
//?huffman_coding.cpp?
//?Huffman2015.1.12
//?作者:杜衡?電信碩3
//?輸入方式:控制臺輸入圖像路徑
//?功能:對256色的灰度圖像進行壓縮編碼
#include?“stdafx.h“
#include?
#include?
#include?
#include?“Windows.h“
#include?“math.h“
#include?
//幾個全局變量,存放讀入圖像的位圖數據、寬、高、顏色表及每像素所占位數(比特)?
//此處定義全局變量主要為了后面的圖像數據訪問及圖像存儲作準備
unsigned?char?*pBmpBuf;//讀入圖像數據的指針
int?bmpWidth;//圖像的寬
int?bmpHeight;//圖像的高
int?imgSpace;//圖像所需空間
RGBQUAD?*pColorTable;//顏色表指針
int?biBitCount;//圖像類型
char?str[100];//文件名稱?
int?Num[300];//各灰度值出現的次數?
float?Feq[300];//各灰度值出現的頻率?
unsigned?char?*lpBuf;//指向圖像像素的指針
unsigned?char?*m_pDib;//存放打開文件的DIB
int?NodeNum; //Huffman樹總節點個數
int?NodeStart; //Huffman樹起始節點
struct?Node{ //Huffman樹節點
int?color; //記錄葉子節點的灰度值(非葉子節點為?-1)
int?lsonrson; //節點的左右兒子(若沒有則為?-1)
int?num; //節點的數值(編碼依據)
int?mark; //記錄節點是否被用過(用過為1,沒用過為0)
}node[600];
char?CodeStr[300][300]; //記錄編碼值
int?CodeLen[300]; //編碼長度
bool?ImgInf[8000000]; //圖像信息
int?InfLen; //圖像信息長度
/***********************************************************************
*?函數名稱:
*?readBmp()
*
*函數參數:
*??char?*bmpName?-文件名字及路徑
*
*返回值:
*???0為失敗1為成功
*
*說明:給定一個圖像文件名及其路徑,讀圖像的位圖數據、寬、高、顏色表及每像素
*??????位數等數據進內存存放在相應的全局變量中
***********************************************************************/
bool?readBmp(char?*bmpName)??//在后邊讀取文件時,內部實參為readpath
{
//二進制讀方式打開指定的圖像文件
FILE?*fp=fopen(bmpName“rb“);?//?rb:允許讀寫
if(fp==0)
{?
printf(“未找到指定文件!\n“);
return?0;
}
//跳過位圖文件頭結構BITMAPFILEHEADER
fseek(fp?sizeof(BITMAPFILEHEADER)0);
//定義位圖信息頭結構變量,讀取位圖信息頭進內存,存放在變量head中
BITMAPINFOHEADER?head;??
fread(&head?sizeof(BITMAPINFOHEADER)?1fp);?
//獲取圖像寬、高、每像素所占位數等信息
bmpWidth?=?head.biWidth;
bmpHeight?=?head.biHeight;
biBitCount?=?head.biBitCount;
//定義變量,計算圖像每行像素所占的字節數(必須是4的倍數)
int?lineByte=(bmpWidth?*?biBitCount/8+3)/4*4;
//灰度圖像有顏色表,且顏色表表項為256
if(biBitCount==8)
{
//申請顏色表所需要的空間,讀顏色表進內存
pColorTable=new?RGBQUAD[256];
fread(pColorTablesizeof(RGBQUAD)256fp);
}
//申請位圖數據所需要的空間,讀位圖數據進內存
pBmpBuf=new?unsigned?char[lineByte?*?bmpHeight];
fread(pBmpBuf1lineByte?*?bmpHeightfp);
//關閉文件
fclose(fp);
return?1;
}
/***********************************************************************
保存信息
***********************************************************************/
//?函數功能:二進制轉十進制
int?Change2to10(int?pos){
int?ijtwo?=?1;
j?=?0;
for(i?=?pos?+?7;i?>=?pos;i?--){
j?+=?two?*?ImgInf[i];
two?*=?2;
}
return?j;
}
//?函數功能:保存Huffman編碼樹
int?saveInfo(char?*writePathint?lineByte){
int?ijk;
FILE?*fout;
fout?=?fopen(writePath“w“);
fprintf(fout“%d?%d?%d\n“NodeStartNodeNumInfLen);//輸出起始節點、節點總數、圖像所占空間
for(i?=?0;i? fprintf(fout“%d?%d?%d\n“node[i].colornode[i].lsonnode[i].rson);
}
/*for(i?=?0;i? fprintf(fout“%d“ImgInf[i]);
}
fprintf(fout“\n“);*/
fclose(fout);
return?0;
}
//?函數功能:保存文件
bool
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????44544??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\Debug\huffman_coding.exe
?????文件?????459356??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\Debug\huffman_coding.ilk
?????文件?????584704??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\Debug\huffman_coding.pdb
?????文件??????25820??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\Debug\BuildLog.htm
?????文件????????663??2015-01-10?16:40??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\Debug\huffman_coding.exe.em
?????文件????????728??2015-01-10?16:40??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\Debug\huffman_coding.exe.em
?????文件????????621??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\Debug\huffman_coding.exe.intermediate.manifest
?????文件??????53421??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\Debug\huffman_coding.obj
?????文件????3211264??2015-01-10?16:40??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\Debug\huffman_coding.pch
?????文件?????????65??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\Debug\mt.dep
?????文件??????12265??2015-01-10?16:40??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\Debug\stdafx.obj
?????文件?????478208??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\Debug\vc90.idb
?????文件?????167936??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\Debug\vc90.pdb
?????文件??????13776??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\huffman_coding.cpp
?????文件???????4519??2015-01-10?17:07??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\huffman_coding.vcproj
?????文件???????1427??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\huffman_coding.vcproj.USER-20130119ZL.Administrator.user
?????文件???????1225??2015-01-10?16:35??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\ReadMe.txt
?????文件????????219??2015-01-10?16:35??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\stdafx.cpp
?????文件????????233??2015-01-10?16:35??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\stdafx.h
?????文件????????498??2015-01-10?16:35??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\targetver.h
?????文件???11029504??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding.ncb
?????文件????????908??2015-01-10?16:35??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding.sln
????..A..H.?????13312??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding.suo
?????文件???????5174??2015-01-10?17:22??數字圖像編碼作業第五題?杜衡?2014204068\test\keyboard.bmp
?????文件???????5174??2015-01-10?17:19??數字圖像編碼作業第五題?杜衡?2014204068\test\lena.bmp
?????文件???????2443??2015-01-13?18:38??數字圖像編碼作業第五題?杜衡?2014204068\test\lena_Huffman.bhd
?????文件????????154??2015-01-13?18:38??數字圖像編碼作業第五題?杜衡?2014204068\test\lena_Huffman.txt
?????文件???????5174??2015-01-13?17:40??數字圖像編碼作業第五題?杜衡?2014204068\test\lena_Huffman_Decode.bmp
?????文件??????62399??2015-01-13?19:13??數字圖像編碼作業第五題?杜衡?2014204068\霍夫曼圖像壓縮編碼解碼程序說明.docx
?????目錄??????????0??2015-01-14?09:43??數字圖像編碼作業第五題?杜衡?2014204068\huffman_coding\huffman_coding\Debug
............此處省略8個文件信息
評論
共有 條評論