WEB开发网
开发学院软件开发VC zlib 压缩管道 阅读

zlib 压缩管道

 2008-10-22 19:25:36 来源:WEB开发网   
核心提示:/* Zlib 是常用的压缩库,在很多平台上使用,是用c和部分汇编完成的,提供的是基于c接口的使用函数 在zlib 的contrib中提供了三种基于iostream的使用方式. 在MFC中,经常使用CFile进行文件的读写操作,在这种时候,如果想使用Zlib的话,要么使用zlib自身 提供的操作函数,要么使用zlib

/*

Zlib 是常用的压缩库,在很多平台上使用,是用c和部分汇编完成的,提供的是基于c接口的使用函数

在zlib 的contrib中提供了三种基于iostream的使用方式.

在MFC中,经常使用CFile进行文件的读写操作,在这种时候,如果想使用Zlib的话,要么使用zlib自身

提供的操作函数,要么使用zlib contrib中iostream操作流.或者自己对zlib进行封装.

所以我对zlib进行了封装,便于使用.

Filter 功能类

zlib_compress_filter<int 压缩级别> 实现压缩功能类,根据模板参数实现不同的压缩程度. 

zlib_uncompress_filter<int > 实现解压功能类,模板参数总为 1

Filter类自身带有 缓冲区, 可以存储处理后的数据,用户可以直接通过这两个Filter类对数据进行

压缩和解压缩操作.

Pipe类

为了和MFC中的CFile类进行配接,对数据进行处理后,把CFile作为最后接受数据的容器,类似于

Boost库中的Sink,提供了一个模板实现的BufferPipe模板类.

template <typename filter,typename buffer_type, typename next_pipe> class BufferPipe;

模板参数:

filter 数据处理用filter

buffer_type 缓冲类型

next_pipe 后面接的pipe,可以是CFile,用于最终写入磁盘.

Pipe后还可以接一个Pipe,可以象一个管子连接起来,并且,以后通过扩充filter可以实现不同的数据操作功能.

提供了一个测试代码

编译后一个对话框 四个 按钮

按钮1 将 c:a.bmp 压缩为 c:b.cr   使用filter

按钮2 将 c:b.cr 解压缩为 c:c.bmp  使用filter

按钮3 将 c:a.bmp 压缩为 c:d.cr  使用pipe功能

按钮4 将 c:a.bmp 通过压缩和解压缩管道, 存储为 e.bmp应该和a.bmp相同,用于测试管道的连接功能.

代码位置:

http://www.cppblog.com/files/hdqqq/z_file.rar

编译需要的zlib 请自行到该库的网站下载.

这个文章实现的和boost中的filter类似的功能,可以和MFC配合使用.

不足:

fiter 使用的 buf_holder写得比较粗糙,以后有机会的话,改进.

*/

Tags:zlib 压缩 管道

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接