{完成压缩,释放压缩流}
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 := '正在处理图象';