远程控制篇:抓取远程屏幕图像
远程控制篇:抓取远程屏幕图像
{抓屏幕图像,保存为内存流--BMP流,压缩BMP流,JPG流,以及使用流}
{在网络中传送BMP流和JPG流的速度没测试过}
{BMP流的压缩是无损压缩}
{
全局变量
memoryStream:TMemoryStream;
memoryStream:=TMemoryStream.create;
}
var
image:Timage;
jpgstream:TJPEGImage;
ss:tcanvas;
begin
ss:=tcanvas.Create;
ss.Handle:=getdc(0);
image:=timage.Create(self);
image.width:=Screen.width;
image.Height:=screen.Height ;
image.picture.bitmap.PixelFormat:= pf16bit;
bitblt(image.canvas.handle,0,0,image.width,image.height,ss.handle,0,0,srccopy);
{大大的原始BMP流
image.picture.bitmap.SaveToStream(memoryStream);
}
{无损压缩BMP流 uses Zlib.pas
{先定义变量count,DestStream,SourceStream}
image.picture.bitmap.SaveToStream(memoryStream);
Count:=memoryStream.Size;
DestStream:=TMemoryStream.Create;
{压缩方式:clnone,clfastest,cldefault,clmax}
SourceStream:=TCompressionStream.Create(cldefault, DestStream);
try
memoryStream.SaveToStream(SourceStream);
SourceStream.Free;
memoryStream.Clear;
memoryStream.WriteBuffer(Count, SizeOf(Count));
memoryStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
}
{JPG流 uses jpeg
jpgstream:= TJPEGImage.Create;
jpgstream.Assign(image.picture.bitmap);
jpgstream.CompressionQuality:=50; {压缩质量}
jpgstream.Compress;
jpgstream.SaveToStream(memoryStream);{保存为JPG流}
jpgstream.free;
}
ReleaseDC(0,ss.Handle);
image.free;
{发送内存流...}
-----------------------------------------------------
{接收内存流...}
{使用BMP流
image.Picture.Bitmap.LoadFromStream(bmpStream);}
{还原压缩的BMP流 uses:Zlib.pas
先定义变量count,buffer,DestStream,SourceStream
memoryStream是压缩的BMP流
memoryStream.ReadBuffer(Count, SizeOf(Count));
GetMem(Buffer, Count);
DestStream:=TMemoryStream.Create;
SourceStream:=TDecompressionStream.Create(memoryStream);
Try
SourceStream.ReadBuffer(Buffer^, Count);
DestStream.WriteBuffer(Buffer^, Count);
DestStream.Position:=0;
image.Picture.Bitmap.LoadFromStream(DestStream);
finally
FreeMem(Buffer);
DestStream.Free;
end;
}
使用JPG流 image.Picture.Assign(jpgstream);
--------------------------------------------
湖北襄樊 官本和(gbh12345@china.com) 2001.4
详见主页源程序:
http://delphi21cn.yeah.net
http://personal.hb.cninfo.net/~gbh
- 最新文章
- 利用Delphi消息处理建立类似Windows开始菜单[01-04]
- 零代码保存窗口运行状态[01-04]
- 编译器(解释器)编写指南-编写编译器(解释器)的工具-LEX[01-04]
- 利用Hook技术实现键盘监控[01-04]
- 获得Memo、RichEdit的光标位置[01-04]
- 使用互斥对象让程序只运行一次[01-04]
- 相关文章
