background image

   其中:

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;