BCB6 使用TZCompressionStream压缩
对方公司的数据是通过TCompressionStream 压缩之后,存到数据库中,采用的delphi7.起初以为直接用TCompressionStream就能搞定,实际发现BCB 没有这个东西。需要另外部署。
上网搜索之后,发现本质是一个叫zlib的库。
我用的是 1.2.3版本,下载地址 http://www.base2ti.com/?id=delphi.zlib
关于zlib的说明 http://www.zlib.net/; ,大致喵了一下 是 霍夫曼编码 啥的,后面再一点点仔细研究。
1、编译DelphiZLib.bpr
1.2.3版本解压之后得到 DelphiZLib.bpr 工程, 用BCB6编译这个工程
本质上就是编译那些*.c 文件得到 *.obj 文件 和 delphizlib.lib
2、编译ZLibEx.pas
bcb6新建一个lib 工程,将zlibEx.pas 通过project->Add 添加到工程,build即可,我边编译的时候报错了,发现是这个pas文件中
不知道为啥有 “锘縶*********************************” 这样的乱码,将乱码改成 “{******” (老实说delphi用 {表示注释 我不能理解) 即可。
得到 ZLibEx.hpp
3、编译ZLibExGZ.pas
与编译ZLibEx.pas同样的方法,得到ZLibExGZ.hpp
4、添加到运行环境
网上很多人喜欢吧 库文件一股脑的拷贝到 borland 安装目录的lib文件夹下面,这么做因为BCB工程默认会 引用 $(BCB)\include
$(BCB)\include\VCL (类似JAVA里面部署环境变量,总之就是要当前工程能够找到引用的lib obj pas cpp 这些库文件)
我是单独引用或在程序中带上三方的lib(仅仅是个人喜好,不喜欢混一块)。比如 D:\zlib 下面放了编译出来的lib obj hpp pas 这些文件 ,那么 optiontion->directores\contains
include path 和 lib path 引用D:\ZLIB
5、添加lib,obj
将d:\zilib 的 lib 和 obj 复制到到 当前工程下面, 比如 D:\project\zlib 文件夹里面
然后通过 project->add
吧lib 和 obj 都引用过去,否则报 无法引用xxxx之类的错误。
6、使用
在工程代码中
#include "ZLibEx.hpp"
即可使用
//压缩流
TZCompressionStream
//解压流
TZDecompressionStream
7、例子
这些例子是看人家delphi 自己翻译过来,又调整了下,保证能运行。前提是程序目录下有 s.bmp文件
//压缩的例子
void __fastcall TForm1::btn3Click(TObject *Sender)
{
TMemoryStream *fs = new TMemoryStream();
fs->LoadFromFile("s.bmp");
int fsize = 0;
fsize = fs->Size;
TMemoryStream *ms = new TMemoryStream();
ms->Write(&fsize,sizeof(fsize));
//构造时1参数为目标流 、2参数为压缩等级,这里选最快
//enum TZCompressionLevel { zcNone, zcFastest, zcDefault, zcMax, zcLevel1, zcLevel2, zcLevel3, zcLevel4, zcLevel5, zcLevel6, zcLevel7, zcLevel8, zcLevel9 };
TZCompressionStream *cs = new TZCompressionStream(ms,zcFastest);
//输入文件流
fs->SaveToStream(cs);
//压缩完毕保存压缩文件
ms->SaveToFile("test.crp");
delete fs;
delete cs;
delete ms;
}
//解压上面产生的 test.crp
void __fastcall TForm1::btn2Click(TObject *Sender)
{
TMemoryStream *fs = new TMemoryStream();
fs->LoadFromFile("test.crp");
fs->Position = 0;
int fsize = 0;
//此方法可以得到解压之后的大小
fs->ReadBuffer(&fsize,sizeof(fsize));
TMemoryStream* ms = new TMemoryStream();
ms->SetSize(fsize);
TZDecompressionStream* ds = new TZDecompressionStream(fs);
//解压后输入到ms流
ds->Read(ms->Memory,fsize);
ms->SaveToFile("ok.bmp");
delete ms;
delete ds;
delete fs;
}
BCB6 使用TZCompressionStream压缩的更多相关文章
- delphi 压缩ZLib
system.ZLib http://docwiki.embarcadero.com/CodeExamples/Berlin/en/ZLibCompressDecompress_(Delphi) 还不 ...
- ASP.NET Core 中间件之压缩、缓存
前言 今天给大家介绍一下在 ASP.NET Core 日常开发中用的比较多的两个中间件,它们都是出自于微软的 ASP.NET 团队,他们分别是 Microsoft.AspNetCore.Respons ...
- Golang 编写的图片压缩程序,质量、尺寸压缩,批量、单张压缩
目录: 前序 效果图 简介 全部代码 前序: 接触 golang 不久,一直是边学边做,边总结,深深感到这门语言的魅力,等下要跟大家分享是最近项目 服务端 用到的图片压缩程序,我单独分离了出来,做成了 ...
- 【开源毕设】一款精美的家校互动APP分享——爱吖校推 [你关注的,我们才推](持续开源更新3)附高效动态压缩Bitmap
一.写在前面 爱吖校推如同它的名字一样,是一款校园类信息推送交流平台,这么多的家校互动类软件,你选择了我,这是我的幸运.从第一次在博客园上写博客到现在,我一次一次地提高博文的质量和代码的可读性,都是为 ...
- linux 如何对文件解压或打包压缩
tar命令用与对文件打包压缩或解压,格式: tar [选项] [文件] 打包并压缩文件: tar -czvf 压缩包名 .tar.gz 解压并展开压缩包: tar -xzvf 压缩包名 .tar. ...
- linux压缩和解压缩命令大全
.tar 解包:tar zxvf FileName.tar 打包:tar czvf FileName.tar DirName ------------------------------------- ...
- 快速开发Grunt插件----压缩js模板
前言 Grunt是一款前端构建工具,帮助我们自动化搭建前端工程.它可以实现自动对js.css.html文件的合并.压缩等一些列操作.Grunt有很多插件,每一款插件实现某个功能,你可以通过npm命名去 ...
- H5图片压缩与上传
接到需求,问前端是否可以压缩图片?因为有的图片太大,传到服务器上再压缩太慢了.意识里没有这么玩过,早上老大丢来一个知乎链接,一看,原来前辈们已经用canvas实现了(为自己的见识羞愧3秒钟,再马上开干 ...
- 压缩javascript文件方法
写在前面的话:正式部署前端的时候,javascript文件一般需要压缩,并生成相应的sourcemap文件,对于一些小型的项目开发,这里提供一个简单的办法. ======正文开始====== 1.下载 ...
随机推荐
- 高级UI-Palette
Google推出的Palette是用来调色的,正如其汉语意思一样,可以用来显示颜色,在显示图片的时候,会配合图片的色调来显示,这样就显得很融合,其实Palette可以分析出图片中的很多特性,例如主色调 ...
- js类似新闻图片轮换(带有文字介绍,其实可以放任何内容)
js类似新闻图片轮换(带有文字介绍,其实可以放任何内容) 主要是利用style="display:block;" 属性<script language="javas ...
- C#实现动态发布IIS站点帮助类
准备工作: 1.引用 System.DirectoryServices 系统程序集 2.引用 Microsoft.Web.Administration 程序集,类库位置在 C:\Windows\Sys ...
- ubuntu的sudo免密
ubuntu的sudo免密与centos大同小异,都是在/etc/sudoers中添加用户信息,添加的内容也一样,只是位置不一样. centos的位置如下: 而ubuntu的位置如下: 除此之外,两行 ...
- 1、3 list 加入缓存,并postman测试
1.pom.xml导入redis依赖 2.配置文件配置 redis 3.主类开启缓存注解 4.Service方法上加注解 @Cacheable(value="list")//val ...
- vue-cli开发-搭建项目(一)
前言 vue-cli是Vue官方提供的命令行工具,可用于快速搭建大型单页应用.集成了webpack环境及主要依赖,对于项目的搭建.打包.维护管理等都非常方便快捷.建议先熟悉 Vue 本身之后再研究 C ...
- Oracle数据库四种数据完整性约束
Oracle数据库四种数据完整性约束 1.实体完整性 同样的数据不能重复插入(1)采取什么措施保证实体完整性?我们可以给表创建主键约束吗,主键保证了数据的唯一性,主键可以保证同一条记录只能插入一次. ...
- swagger 爬坑记
Swagger 的好处不用我多说,但是一不小心可能就被坑……今天下午就被上了一课,废话不多说,直接上代码(图) 实体类: 好像没啥问题,对吧? 但是,在http://localhost:8080/sw ...
- Word 查找替换高级玩法系列之 -- 用替换功能删除空白区域
当你遇到Word文档中时不时的出现一些空白区域的时候会怎么办呢?一个个删除吗?NO!NO!NO!!!那样也太慢了!仅使用替换功能就可以帮你一步搞定它! 下面这篇文档中含有半角空格.全角空格.不间断空格 ...
- 嗯 第二道线段树题目 对左右节点和下标有了更深的理解 hdu1556
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...