1.实验目的
通过“图片压缩编码”的编程实践,学习树、遍历二叉树、哈夫曼树、哈夫曼编码和他们的编程应用。
(1)掌握树的存储结构
(2)掌握二叉树的三种遍历方法
(3)掌握并理解Huffman树、Huffman编码等知识和应用
(4)掌握文件的操作
(5)使用Huffman算法实现图像压缩程序
2.实验内容
使用Huffman压缩算法,对一幅BMP格式的图片文件进行压缩。图片文件名为“Pic.bmp”,压缩后保存为“Pic.bmp.huf”文件。使用VS2010作为开发工具,开发一个控制台程序,使用Huffman压缩算法对图片文件“Pic.bmp”进行压缩。具体要求如下:
(1)读取原文件,统计权值:
运行程序,输入文件名。
以“Pic.bmp”文件为例。若文件存放在F盘根目录下,输入文件完整路径“F:\Pic.bmp”。按回车结束。以字节流的方式,只读打“Pic.bmp”文件。
逐字节读取文件,统计文件中256种字节重复的次数,保存到一个数组中int weight[256]中。
(2)生成Huffman树
根据(1)中统计的结果,构建Huffman树。定义一个结构体来记录每个节点的权值、父节点、左孩子和右孩子。使用结构体数组来存储这个Huffman树。
(3)生成Huffman编码
遍历(2)中生成的Huffman树,记录256个叶子节点的Huffman编码,保存在字符串数组中。
(4)压缩原文件
使用Huffman编码对原文件中的字节重新编码,获得压缩后的文件数据。
(5)保存压缩文件
将编码过的数据,保存到文件“Pic.bmp.huf”中。