目录

一、简介

二、使用方法

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算法。

LZMA解压缩编码算法的使用相关推荐

  1. 4种最常问的编码算法面试问题,你会吗?

    导语:面试是测查和评价人员能力素质的一种考试活动.最常问的编码算法面试问题你知道多少呢? 作者 | Rahul Sabnis 译者 | 苏本如,编辑 | 刘静 来源 | CSDN(ID:CSDNnew ...

  2. huffman java_详解Huffman编码算法之Java实现

    Huffman编码介绍 Huffman编码处理的是字符以及字符对应的二进制的编码配对问题,分为编码和解码,目的是压缩字符对应的二进制数据长度.我们知道字符存贮和传输的时候都是二进制的(计算机只认识0/ ...

  3. Elias-Fano编码算法——倒排索引压缩用,本质上就是桶排序数据结构思路

    Elias-Fano编码过程如下:把一组整数的最低l位连接在一起,同时把高位以严格单调增的排序划分为桶. Example: 2, 3, 5, 7, 11, 13, 24 Count in unary ...

  4. Stanford UFLDL教程 微调多层自编码算法

    微调多层自编码算法 Contents [hide] 1介绍 2一般策略 3使用反向传播法进行微调 4中英文对照 5中文译者 介绍 微调是深度学习中的常用策略,可以大幅提升一个栈式自编码神经网络的性能表 ...

  5. Stanford UFLDL教程 栈式自编码算法

    栈式自编码算法 Contents [hide] 1概述 2训练 3具体实例 4讨论 5中英文对照 6中文译者 概述 逐层贪婪训练法依次训练网络的每一层,进而预训练整个深度神经网络.在本节中,我们将会学 ...

  6. Stanford UFLDL教程 自编码算法与稀疏性

    自编码算法与稀疏性 目前为止,我们已经讨论了神经网络在有监督学习中的应用.在有监督学习中,训练样本是有类别标签的.现在假设我们只有一个没有带类别标签的训练样本集合 ,其中 .自编码神经网络是一种无监督 ...

  7. 浅谈Base64编码算法

    一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来,这种操作称之为编码. 解码:利用编码使用的算法的逆运算,对经过编码的 ...

  8. Base64编码算法

    转载:http://www.cnblogs.com/xqxacm/p/4886299.html 一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式 ...

  9. 1313. 解压缩编码列表

    2020-03-17 1.题目描述 解压缩编码列表 2.题解 res.push_back(nums[i+1]); 3.代码 #include <iostream> #include < ...

  10. python降维可视化 自编码_deep learning 自编码算法详细理解与代码实现(超详细)...

    在有监督学习中,训练样本是有类别标签的.现在假设我们只有一个没有带类别标签的训练样本集合 ,其中 .自编码神经网络是一种无监督学习算法,它使用了反向传播算法,并让目标值等于输入值,比如 .下图是一个自 ...

最新文章

  1. 公司又有人被开除了,这次真的是...
  2. Win7启动显示无法加载用户配置文件
  3. 神策 FM:从 IT 到 DT,To B 市场走到了哪一步?
  4. java解析xml转为Map
  5. MVC架构中,用户的请求简单梳理
  6. 16攻击行为的学习理论
  7. 使Tomcat可以下载中文文件
  8. BGP——community团体属性(讲解+配置)@
  9. Intel Core Enhanced Core架构/微架构/流水线 (11) - 高速缓存读/写操作 Cache Load/Store
  10. bzoj 1799: [Ahoi2009]self 同类分布(数位DP)
  11. Linux的哲学思想
  12. 取消button的点击效果_(Vue动效)6.Vue中列表过渡效果
  13. Luogu P4403 [BJWC2008]秦腾与教学评估【二分答案】By cellur925
  14. Vb6 Modbus TCP通讯示例源代码
  15. 柯尔莫哥洛夫最后的问题
  16. BP神经网络的基本思想,bp神经网络原理简述
  17. 【聚类模型①】k均值聚类算法
  18. 【LaTeX】复杂表格的制作:Excel2LaTeX及细节调整
  19. iPhone软件开发前需认真考虑问题
  20. 机器学习之三:降维技术

热门文章

  1. linux系统编程界面,App主界面比较 - Android学习系列_Linux编程_Linux公社-Linux系统门户网站...
  2. PS合成下雨天蹲在路灯下的天使男人清(15)
  3. 扬州大学计算机专业考研分数,扬州大学考研分数线
  4. 电子通讯录(数据库版存储)
  5. 模板学堂丨JumpServer安全运维审计大屏
  6. java lpad oracle_「oracle」lpad函数和rpad函数详解
  7. python发送qq邮件_使用Python登录QQ邮箱发送QQ邮件
  8. c++实训 数组之犯二程度 与队列变换
  9. 电脑桌面简约时钟工具OneClock
  10. C++17 关键新特性介绍及代码讲解 (6) — fold expression