数字图像实验 哈夫曼编码的方法和实现1234
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八哈夫曼编码的方法和实现
一、实验目的
1.掌握哈夫曼编码的基本理论和算法流程;
2. 用VC++6.0编程实现图像的哈夫曼编码。
二、实验内容
1.画出哈夫曼编码的算法流程;
2.用VC++6.0编程实现哈夫曼编码。
三、实验步骤
(1)启动VC++6.0,打开Dip工程。
(2)在菜单栏→insert→resouce→dialog→new,在对话框模版的非控制区点击鼠标右键,在弹出的对话框中选properties,设置为ID:IDD_DLG_Huffman,C标题:哈夫曼编码表。
(3)在弹出的对话框中,添加如下的按钮等控件:
(4)在ResourceView栏中→Menu→选IDR_DIPTYPE ,如图
在图像编码菜单栏下空的一栏中,右键鼠标,
在弹出的对话框中选属性properties,在弹出的对话框中,进行如下的设置
(5)右击哈夫曼编码表菜单栏,在建立的类向导中进行如下设置
(6)在DipDoc.cpp中找到void CDipDoc::OnCodeHuffman()添加如下代码void CDipDoc::OnCodeHuffman()
{
int imgSize;
imgSize = m_pDibObject->GetWidth()*m_pDibObject->GetHeight();
//在点处理CPointPro类中创建用来绘制直方图的数据
CPointPro PointOperation(m_pDibObject );
int *pHistogram = PointOperation.GetHistogram();
//生成一个对话框CHistDlg类的实例
CDlgHuffman HuffmanDlg;
//将绘制直方图的数据传递给CHistDlg对话框类的公有成员变量m_pnHistogram
if( pHistogram != NULL )
{
//设置直方图数据指针
HuffmanDlg.m_fFreq = pHistogram;
HuffmanDlg.m_iSizeImage = imgSize;
if(m_pDibObject->GetNumBits() >= 8)
HuffmanDlg.m_iLeafNum=256;
else
HuffmanDlg.m_iLeafNum=m_pDibObject->GetNumBits();
}
//显示对话框
if ( HuffmanDlg.DoModal() != IDOK)
return;
delete [] pHistogram;
}
(7)在DipDoc.cpp中添加#include "DlgHuffman.h"
(8)将DlgHuffman.h、DlgHuffman.cpp文件拷贝到当前工程目录文件里面;并添加到当前工程。
四、实验结果
五、实验心得及体会
通过做这次实验掌握了哈夫曼编码的基本理论和算法流程;掌握了编程实现图像的哈夫曼编码算法。