LZMA解压缩编码算法的使用

目录

一、简介

二、使用方法

1.准备库文件

2.开始编码

三、总结


一、简介

博主在项目中遇到了帧数据流解压缩编码的功能需求,在这里对所采用的解压缩编码算法LZMA的背景、性能和使用介绍作一下简介,主要的目的是积累经验,其次是帮助其他有同样需求的同学少走弯路,分享心得。

lzma算法是7z解压缩软件的默认算法,经过博主的查阅资料与测试,主要发现,与其他算法相比较,lzma算法具有很低的压缩率(压缩数据/原始数据),但是解压缩编码的速度很慢。所以如果你对解压缩的时间没有任何要求,可以尝试这种强大的解压缩编码算法;但是如果你对速度和解压缩比例都有要求,建议使用lz4或gzip算法。这里有几种解压缩编码算法的比较。

二、使用方法

1.准备库文件

一般来说你需要首先去7z的官网下载各种语言的环境,然后生成所需要的库文件,如下图1。但是这里博主直接给大家提供了.dll和.lib文件(见附件)。


如果你想自己配可以按照下面操作流程:以c语言为例,采用windows环境(linux这里不做讲解):使用vs打开lzma1900/C/Util/LzmaLib/目录下的.dsw文件,如果遇到vs版本问题直接确认更改即可;

打开后需要设置的地方输出库文件的位数,x86或者是x64,按需设置;

然后在项目上单机右键,点击【生成】,如果遇到错误不要惊慌——

(1)保证lzma1900内文件全部解压出来;

(2)遇到“错误 D8016 “/ZI”和“/Gy-”命令行选项不兼容 ”时,进入“项目”—>“属性”—>“C/C++”—>“常规”—>“调试信息格式”—>选择“程序数据库(/Zi)”或“无”(博主选了Zi就好了);

(3)遇到C1083的错误时,检查一下“项目”—>“属性”—>“目录”—>“包含目录”中是否添加了C1083提示文件的路径,一般来说不会出错,博主这里出错是因为“项目”—>“属性”—>“常规”面板中,使用了旧的Windows SDK 版本,手动选则最新的SDK版本就好了。

至此,如果vs【生成】操作顺利的话,你可以在同级目录下找到LZMA.lib文件,在C:\Util\目录下找到LZMA.dll文件。这就是我们在项目中所需要的库文件。


2.开始编码

创建vs空项目,注意项目的位数要与你采用的库文件位数一致。

将第三方文件7zTypes.h、LzmaLib.h放到vs项目的.vcxproj文件同级目录下,并手动在项目中附加到资源管理器中。

博主主要是针对rgb图像测试解压缩算法的性能,所以引入了第三方文件vec3.h、vec3.cpp用于构建rgb图像(借鉴于raytracing in one weekend系列教程);

最后创建一个.cpp文件作为主程序文件。具体代码暂时不放到博客正文里了,避免与毕设中的代码重复,等到毕设结束之后博主再来完善文章。但是所有的代码、lzma的源码都放到附件里,大家自行获取。

假装有代码。

需要注意的一点是,压缩、解压缩过程中用到的解压缩参数prop可以在单步调试时看到具体的内容,它会根据其他参数的设置而改变。

三、总结

本篇文章主要介绍了lzma解压缩编码算法的背景、与其他算法的比较,以及具体的使用方法,所有的代码都在附录里,大家可以直接免费下载查阅。

所以如果你对解压缩的时间没有任何要求,可以尝试这种强大的解压缩编码算法;但是如果你对速度和解压缩比例都有要求,建议使用lz4或gzip算法。

 

你可能感兴趣的:(数据解压缩编码)