- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
图像压缩算法的分析与研究毕业设计论文
导读:就爱阅读网友为您分享以下“图像压缩算法的分析 与研究毕业设计论文”的资讯,希望对您有所帮助,感谢您 对92的支持!
if (verbose)
在算法中需要注意这样一个细节问题,即包括这样的特殊情 况:树只包含有一个唯一的字符。在这种情两况下,为了满 足扩展二叉树的内部节点必须有两个子节点的要求,此函数 还须生成另外一叶节点个节点作为填充的辅助节点。函数 首先生成叶节点,索引范围为0-number-l,每个叶节点都 含有字符值,它出现的频率和节点自身的索引值,然后再生 成内部节点。此步需要执行一个number次的循环。来自 优先队列中的每个节点都包含自己在向量树中的索引值,这 便利了节点关系的建立,可以将索引值赋值给父节点的左指 针或右指针,也能够通过索引快速设置对应子节点的父节点 属性。
3?生成位码
函数generateCode()从每个叶节点开始,沿着父节点路径往 上直到发现根节点,就能够确定每个叶节点位码。每向上一 步,如果此节点是其父节点的左子节点,就把位码相应位设 为0,如果是右子节点,则设为lo这样发现的位码是逆序 的,当将它赋值给叶节点的位码数据成员时,需要将位码再 次逆转。
4.写位码
成员函数 writeCompressData()参考上面已经生成的 Huffman编码方案,实现将源文件转换为压缩文件的过程。
它首先以二进制方式再次读入源文件,将其诸字节解释为字 符,并产生对应的压缩编码,此时压缩编码时在内存中,再
将整个压缩码由内存转移到磁盘文件。其代码如下
void HCompress::writeCompressedData()
//用于容纳压缩文件Huffman码的位向量
bit_vector compressedData(totalBits,false); int bitPos, i, j;
unsigned char ch;
//为源文件清除end-of-file状态标记
//并将文件指针设为文件的开始位置
source.clear();
quot;treeSizesource.seekg(0, ios::beg);
quot;
treeSize
Huffman 树的节点数目:quot; lt;lt;
lt;lt; endl lt;lt; endl;
// bitPos 用于将 bits 位码放入 compressedData 中
bitPos = 0;
//再次读取源文件
// 并在 compressedData 中生成 Huffman 码
while (true)
//获取下一个字符 ch = source.get();
if (! source)
break;
〃含有ch的树节点的index
i = charLoc[ch];
//将tree[i].ch的位码放入位向量中
for (j=O;j lt; tree[i].numberOfBits; j++)
{
// 当 tree[i].bits[j]为 1 时,
//对compressedData相应位置位
if (tree[i].bits.test(j)) compressedData[bitPos] = true;
// 一直将bitPos向前推进
bitPos++;
//将位码由内存compressedData中写入到磁盘文件
mem_to_file(compressedData,dest);
men_to_file()的实现如下:
void HCompress::mem_to_file(bit_vectoramp;
bv^fstreamamp; ostr)
//我们无法直接将二进制bit序列vectorlt;boolgt;传递到 文件
〃借助字符串流ostringstream将位流转换,并传递到文件 中 ostringstream os;
//位向量中包含的字节单元个数,如果尾部不足整字节,//
则补齐为整字节
int byteent = (bv.size()+7) gt;gt; 3;
// bitset对象具有转换为unsigned long的方法
bitsetlt;8gt; btemp;
for (int i = 0; i lt; byteent; i++)
{
//将向量每8位转换为bitsetlt;8gt;对象
//再进一步转换为unsigned long
for(int j=0; jlt;8; j++)
btemp[j]= bv[8*i+j];
char ch=btemp.to_ulong();
ostr.put(ch);
//将二进制bit序列从内存传递到文件中
}
}
4运行结果显示及其分析
4.1结果显不:
1 ?对文件mspaint.exe进行压缩,结果如图4-1所示。
您可能关注的文档
最近下载
- 缠绕机的安全操作规程.docx VIP
- 《自然界中的氧循环和碳循环》PPT【优质课件】.pdf VIP
- 砌体及构造柱圈梁等二次结构施工方案.docx VIP
- 专题02 字词梳理及运用(讲义+试题) -2023年一升二语文暑假衔接课(统编版).docx VIP
- 《学习工匠事迹,领略工匠风采》课件 2024—2025学年高教版(2023)中职语文职业模块.pptx VIP
- 国家开放大学,零售管理,形考三.pdf VIP
- 《人工智能:AIGC基础与应用》教学课件.pptx VIP
- 超声引导下冲击波治疗.pptx VIP
- 2024河北交通职业技术学院教师招聘考试笔试试题.docx VIP
- cbcc中国建筑色卡千色卡色号查询表.pdf VIP
原创力文档


文档评论(0)