background image

    

{完成压缩,释放压缩流}

   

BmpStream.Clear;

    

{清空原来位图流}

   

BmpStream.WriteBuffer(Count, Sizeof(Count));

    

{将原来位图的大小保存到新的位图流中,以便使用}

   

BmpStream.CopyFrom(DestStream, 0);

    

{将压缩数据附加到新的位图流后面}

   

BmpStream.Position := 0;

   

NMStrm.PostIt(BmpStream);

    

{发送位图流}

  

finally

   

DestStream.Free;

   

BmpStream.Destroy ;

   

BitMap.Destroy;

   

DeleteDC(SourceDC);

   

ReleaseDC(Bhandle,SourceDC);

  

end; 

 

{释放有关资源}

End;
  该过程得到整个屏幕的图象拷贝,并利用压缩流

SourceStream 和内存流 Deststream 将

位图压缩,并重新把位图大小和压缩数据流保存到位图流中,发送出去,发送位图大小的
目的是在解压前来确定需要的内存空间。
procedure TServerForm.NMStrmServMSG(Sender: TComponent;
const sFrom: String; strm: TStream);
 

Var

  

StreamStr,DestStream:TMemoryStream;

  

SourceStream:TDecompressionStream;
count:Integer;
buffer:pointer;
 

begin

  

ScreenImage.Picture.Bitmap:=nil;

  

If Strm Is TMemoryStream Then

   

StreamStr := Strm AS TMemoryStream

  

Else

   

Exit;

  

StreamStr.Position := 0;

  

StreamStr.ReadBuffer(Count, Sizeof(Count));

   

{得到位图的大小}

  

GetMem(Buffer,Count);

   

{申请数据空间}

  

DestStream := TMemoryStream.Create;

  

SourceStream := TDecompressionStream.Create(StreamStr);

   

{构建解压流,压缩数据由 StreamStr 流得到}

  

StatusBar.SimpleText := '正在处理图象';