其中:
Source 是保存着压缩数据的流;
Function Read(var Buffer; Count: Longint): Longint;
数据读出函数,
Buffer: 存数据缓冲区;
Count: 缓冲区的大小;
函数返回读出的字节数。
数据在读出的过程中,数据被解压缩,并触发
OnProcess 事件。
二、
类的使用
通过类
TCompressionStream 和 TdecompressionStream 的配合使用,我们可以非常方便
地完成数据的压缩和解压,下面就是本人在编写屏幕拷贝程序中的使用例子:
Procedure TClientForm.GetScreen;
Var
SourceDC,DestDC:HDC;
Bhandle:HBITMAP;
BitMap:TBitMap;
BmpStream,Deststream:TMemoryStream;
SourceStream:TCompressionStream;
Count:Integer;
Begin
SourceDC:=CreateDC('display','','',nil);
{得到屏幕的 DC}
DestDC:=CreateCompatibleDC(SourceDC);
{建立临时 DC}
Bhandle:=CreateCompatibleBitmap(SourceDC,Screen.Width, Screen.Height);
{建立位图}
SelectObject(DestDC,Bhandle);
{选择位图 DC}
BitBlt(DestDC,0,0,Screen.Width, Screen.Height,SourceDC,0,0,SRCCOPY);
{拷贝整个屏幕}
BitMap:=TBitMap.Create;
BitMap.Handle := Bhandle;
{保存屏幕位图到 BitMap 中}
BmpStream:=TMemoryStream.Create;
BitMap.SaveToStream(BmpStream);
{建立位图数据的内存流}
count:=BmpStream.Size;
{保存位图的大小}
DestStream:=TMemoryStream.Create;
{目标流,保存压缩数据}
SourceStream:=TCompressionStream.Create(clMax, DestStream);
{构建压缩流,采用最大化压缩,并保存到目标流中}
try
BmpStream.SaveToStream(SourceStream);
{压缩位图流}
SourceStream.Free;