资源简介
基于Qt实现的霍夫曼编码的压缩解压缩程序。压缩、解压缩采用单独一个线程,ui界面一个线程。

代码片段和文件信息
#include “huffman.h“
Huffman::Huffman(QThread *parent) :
QThread(parent)
{
for(int k=0;k<256;k++)
{
for(int mask=128;mask>0;mask/=2)
{
if((k&mask)==0) dic[k].append(“0“);
else dic[k].append(“1“);
}
}
}
void Huffman::run()
{
if(isCompress)
{
this->ComAnalyse();
this->GenerateCompressFile();
emit message(“Compress Complete!“);
}
else
{
this->DecomAnalyse();
emit message(“Decompress complete!“);
}
}
void Huffman::Compress(QString comFile QString after)
{
if(comFile==after)
{
emit error(“The input file name and the output file name cann‘t be the same!“);
return;
}
inFile.setFileName(comFile);
outFile.setFileName(after);
if(!CheckFile()) return;
isCompress=true;
this->start();
}
void Huffman::Decompress(QString decomFile QString after)
{
if(decomFile==after)
{
emit error(“The input file name and the output file name cann‘t be the same!“);
return;
}
inFile.setFileName(decomFile);
outFile.setFileName(after);
if(!CheckFile()) return;
isCompress=false;
this->start();
}
bool Huffman::CheckFile()
{
if(!inFile.exists())
{
emit error(“File doesn‘t exist!“);
return false;
}
if(outFile.exists())
{
return QMessageBox::question(NULL“OverWrite?““File exists! OverWrite it?“);
}
return true;
}
void Huffman::ComAnalyse()
{
statisticMap.clear();
char c;
inFile.open(QIODevice::ReadOnly);
emit message(“Analysing File!“);
while(!inFile.atEnd())
{
inFile.getChar(&c);
if(statisticMap.contains(c)) statisticMap[c]++;
else statisticMap[c]=0;
}
emit message(“Generating Huffman Tree!“);
tree.Generate(statisticMapcodeMap);
inFile.close();
}
void Huffman::GenerateCompressFile()
{
emit message(“Generating compressed file!“);
outFile.open(QIODevice::WriteOnly);
QByteArray headercontent;
char c;
int mapSize=codeMap.size();
int zero=0;
inFile.open(QIODevice::ReadOnly);
while(!inFile.atEnd())
{
inFile.getChar(&c);
content.append(codeMap[c]);
}
zero=8-content.size()%8;
if(zero==8) zero=0;
for(int i=0;i header.append((char)zero);
header.append((char)mapSize);
QMap::iterator it;
for(it=codeMap.begin();it!=codeMap.end();it++)
{
header.append(it.key());
header.append(this->formatCodeMap(it.value()));
}
outFile.write(header);
bool ok;
QByteArray after;
after.clear();
for(int i=0;i {
after.append((char)content.mid(i8).toInt(&ok2));
emit progress((i*100)/content.size());
}
emit progress(100);
outFile.write
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 308 2014-11-25 02:46 HuffmanCompress\.git\config
文件 73 2014-11-25 02:45 HuffmanCompress\.git\desc
文件 103 2014-11-25 15:03 HuffmanCompress\.git\FETCH_HEAD
文件 23 2014-11-25 02:45 HuffmanCompress\.git\HEAD
文件 177 2014-11-25 02:45 HuffmanCompress\.git\hooks\README.sample
文件 992 2014-11-25 15:02 HuffmanCompress\.git\index
文件 113 2014-11-25 02:45 HuffmanCompress\.git\info\exclude
文件 511 2014-11-25 15:02 HuffmanCompress\.git\logs\HEAD
文件 511 2014-11-25 15:02 HuffmanCompress\.git\logs\refs\heads\master
文件 137 2014-11-25 02:46 HuffmanCompress\.git\logs\refs\remotes\origin\master
文件 178 2014-11-25 02:45 HuffmanCompress\.git\ob
文件 385 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 389 2014-11-25 14:59 HuffmanCompress\.git\ob
文件 231 2014-11-25 15:02 HuffmanCompress\.git\ob
文件 217 2014-11-25 02:45 HuffmanCompress\.git\ob
文件 256 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 626 2014-11-25 14:59 HuffmanCompress\.git\ob
文件 367 2014-11-25 02:45 HuffmanCompress\.git\ob
文件 1697 2014-11-25 14:59 HuffmanCompress\.git\ob
文件 2616 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 325 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 151 2014-11-25 02:45 HuffmanCompress\.git\ob
文件 707 2014-11-25 14:59 HuffmanCompress\.git\ob
文件 89 2014-11-25 02:45 HuffmanCompress\.git\ob
文件 442 2014-11-25 14:59 HuffmanCompress\.git\ob
文件 389 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 141 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 557 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 589 2014-11-25 02:46 HuffmanCompress\.git\ob
文件 171 2014-11-25 02:46 HuffmanCompress\.git\ob
............此处省略58个文件信息
相关资源
- 介绍几种压缩算法及《笨笨数据压缩
- 很好的一个小波变换图像压缩程序
- lzw压缩,解压缩算法
- 哈夫曼压缩算法(源代码 实现报告)
- jpeg图像压缩实例代码
- lz4压缩解压工具x64和x86
- 块体形状对岩石黏结颗粒模型力学特
- 7-zip压缩包
- 压缩包免费破解密码工具
- 超强JPG图片压缩工具,减小图片文件
- 大型强子对撞机在压缩质量情景中寻
- 压缩感知常见测量矩阵一维仿真信号
- 扎努西电气机械天津压缩机有限公司
- 压缩文件修复工具
- 3d N $$ \\ mathcal {N} $$ = 4个理论和共形块
- 视频压缩工具软件免费版
- 磁通压缩中的模块化对称异常
- 相对论核碰撞中形成的强子物质的等
- Hagedorn态对重离子碰撞中形成的强子物
- 2017黑马软件测试全套完整视频教程
- 压缩作用下砂岩变形破坏过程中的能
- 基于Simulation的涡旋压缩机支架体动态
- 易语言压缩解压模块
- 非超对称杂散弦理论的Calabi-Yau压缩
- 空气调节器用全封闭型电动机-压缩机
- 未压缩与压缩的dicom文件
- 定时自动压缩备份文件并发送电子邮
- 破解加密压缩包
- 自动截拼图工具适合做地图等-地图
- 压缩感知TwIST
评论
共有 条评论