Delphi的压缩流与解压流

2008-04-09 04:30:06来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

原作发表在计算机世界日报:

http://www.ccw.com.cn/htm/app/aprog/01_1_12_4.asp

Delphi数据压缩处理


蔡健

mailto:chaijian@21cn.com



Borland公司推出的 RAD开发工具 Delphi 5.0作为 Windows平台上的主流开发工具,其可视化的开发环境和面向对象编程的强大功能已经吸引了无数的开发人员。但是,一些程序员在实际的开发过程中却时常为对大量的数据进行压缩而伤透脑筋,不得不去查找一些高效的压缩算法或在网上查找第三方的控件来实现压缩。难道 Delphi本身没有提供这个功能吗?其实 Delphi的程序设计师早就考虑到了这一点,他们提供了 Zlib.pas和 Zlibconst.pas两个单元文件来解决数据压缩问题,实现了很高的数据压缩比率。这两个文件保存在 Delphi 5.0安装光盘上 \Info\Extras\Zlib目录下,此外,在 Info\Extras\Zlib\Obj目录中还保存了 Zlib.pas单元引用的 Obj文件。下面本文以压缩一个屏幕拷贝为例介绍如何使用这项功能。 解决思路 首先利用屏幕拷贝捕捉到当前整个屏幕的图像,然后在内存中保存为 BMP文件格式。压缩时,使用 TCompressionStream对象对原始图像进行压缩并且保存为自定义的文件格式;解压缩时,使用 TDecompressionStream对象对被压缩的图像进行解压缩,还原为 BMP格式的图像文件。 具体实现 新建一个项目文件,在主单元的接口部分引用 Zlib.pas,在主表单上放置两个按钮 Button1、 Button2,在它们的 OnClick事件中写上相应的过程调用代码。 部分程序源代码如下: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Zlib; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$ R* .DFM} 1.捕捉全屏幕图像 procedure GetScreen(var Bmp: TBitmap); var Dc: HDC; MyCanvas: TCanvas; MyRect: TRect; begin Dc := GetWindowDC(0); MyCanvas := TCanvas.Create; try MyCanvas.Handle := Dc; MyRect:=Rect(0, 0,Screen.Width, Screen.Height); //图像为 24位真彩色,也可根据实际需要调整 Bmp.PixelFormat := pf24bit; Bmp.Width := MyRect.Right; Bmp.Height := MyRect.Bottom; //捕捉整个屏幕图像 Bmp.Canvas.CopyRect(MyRect, MyCanvas, MyRect); finally MyCanvas.Handle := 0; MyCanvas.Free; ReleaseDC(0, Dc); end; end; 2.压缩图像 procedure CompressBitmap(var CompressedStream: TMemoryStream;const CompressionLevel: TCompressionLevel); var SourceStream: TCompressionStream; DestStream: TMemoryStream; Count: Integer; Begin //获得图像流的原始尺寸 Count := CompressedStream.Size; DestStream := TMemoryStream.Create; SourceStream:=TCompressionStream.Create (CompressionLevel, DestStream); Try //SourceStream中保存着原始的图像流

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:从Internet时间服务器获取标准格林尼治时间

下一篇:Delphi程序执行时实时生成报表