/释放存储屏幕图象的Jpeg文件的内存流
procedure TfrmServer.FormDestroy(Sender: TObject);
begin
jpegstream.free;
end;//发送抓取的屏幕图象(Jpeg格式)
procedure TfrmServer.sendScreen;
var
sendsize: longint;
Buf: array[0..BufSize - 1] of char;
begin
if JpegStream.Size = 0 then
snapscreen;
if LeftSize > BufSize then
SendSize := BufSize
else
SendSize := LeftSize;
//将jpegStream内存流读取SendSize大小的数据到缓冲区
jpegStream.ReadBuffer(Buf, sendSize);
LeftSize := LeftSize - SendSize;
//向客户端发送
try
serversocket.Socket.Connections[0].SendBuf(buf, sendsize);
sleep(10);
except
jpegstream.Clear;
end;
if LeftSize = 0 then
jpegStream.Clear;
end;//抓取本机屏幕,图象转换成Jpeg格式,并存到JpegStream内存流中。
procedure TfrmServer.snapScreen;
var
bmpscreen: Tbitmap;
jpegscreen: Tjpegimage;
FullscreenCanvas: TCanvas;
dc: HDC;
sourceRect, destRect: TRect;
begin
//得到屏幕设备
dc := getdc(0);
//创建画布句柄
fullscreencanvas := Tcanvas.Create;
fullscreencanvas.Handle := dc;
//创建存储位图对象
bmpscreen := Tbitmap.create;
bmpscreen.Width := screen.Width;
bmpscreen.Height := screen.Height;
sourcerect := rect(0, 0, screen.Width, screen.Height);
destrect := rect(0, 0, screen.Width, screen.Height);
//将屏幕图象抓取到bmpScreen位图中
bmpscreen.Canvas.CopyRect(sourcerect, fullscreenCanvas, destrect);
//创建储存Jpeg格式的对象
jpegscreen := Tjpegimage.Create;
//将图象压缩成Jpeg格式,保存到JpegStream内存流中。
jpegscreen.Assign(bmpscreen);
jpegscreen.CompressionQuality := 10;
jpegscreen.SaveToStream(jpegStream);
jpegstream.Position := 0;
LeftSize := jpegStream.Size;
//释放创建的对象
FullscreenCanvas.Free;
bmpscreen.Free;
jpegscreen.Free;
ReleaseDC(0, DC);
end;
上面的程序在传输速度太漫了,我想客户端连接时第一幅图按上面的传完整的图片 第2幅图只传变动过的数据这样可以提高速度。但具体,本人不知道怎么写,不知哪位大虾能有写好的例子能给我 [email protected] 谢谢
procedure TfrmServer.FormDestroy(Sender: TObject);
begin
jpegstream.free;
end;//发送抓取的屏幕图象(Jpeg格式)
procedure TfrmServer.sendScreen;
var
sendsize: longint;
Buf: array[0..BufSize - 1] of char;
begin
if JpegStream.Size = 0 then
snapscreen;
if LeftSize > BufSize then
SendSize := BufSize
else
SendSize := LeftSize;
//将jpegStream内存流读取SendSize大小的数据到缓冲区
jpegStream.ReadBuffer(Buf, sendSize);
LeftSize := LeftSize - SendSize;
//向客户端发送
try
serversocket.Socket.Connections[0].SendBuf(buf, sendsize);
sleep(10);
except
jpegstream.Clear;
end;
if LeftSize = 0 then
jpegStream.Clear;
end;//抓取本机屏幕,图象转换成Jpeg格式,并存到JpegStream内存流中。
procedure TfrmServer.snapScreen;
var
bmpscreen: Tbitmap;
jpegscreen: Tjpegimage;
FullscreenCanvas: TCanvas;
dc: HDC;
sourceRect, destRect: TRect;
begin
//得到屏幕设备
dc := getdc(0);
//创建画布句柄
fullscreencanvas := Tcanvas.Create;
fullscreencanvas.Handle := dc;
//创建存储位图对象
bmpscreen := Tbitmap.create;
bmpscreen.Width := screen.Width;
bmpscreen.Height := screen.Height;
sourcerect := rect(0, 0, screen.Width, screen.Height);
destrect := rect(0, 0, screen.Width, screen.Height);
//将屏幕图象抓取到bmpScreen位图中
bmpscreen.Canvas.CopyRect(sourcerect, fullscreenCanvas, destrect);
//创建储存Jpeg格式的对象
jpegscreen := Tjpegimage.Create;
//将图象压缩成Jpeg格式,保存到JpegStream内存流中。
jpegscreen.Assign(bmpscreen);
jpegscreen.CompressionQuality := 10;
jpegscreen.SaveToStream(jpegStream);
jpegstream.Position := 0;
LeftSize := jpegStream.Size;
//释放创建的对象
FullscreenCanvas.Free;
bmpscreen.Free;
jpegscreen.Free;
ReleaseDC(0, DC);
end;
上面的程序在传输速度太漫了,我想客户端连接时第一幅图按上面的传完整的图片 第2幅图只传变动过的数据这样可以提高速度。但具体,本人不知道怎么写,不知哪位大虾能有写好的例子能给我 [email protected] 谢谢
解决方案 »
- 如何MainMenu数据是数据库里的数据(小弟是个新手求详解)
- DELPHI程序编译后的疑问?
- SQL General Error. ORA-00932:資料類型不一致。
- 这是做什么用的:HKLM\SOFTWARE\Microsoft\Cryptography\RNG\Seed
- 读过李维写的 Delphi 5.X ADO_MTS_COM+高级程序设计篇 第9章的请进。。。。。。
- 紧急!!!!求助!!!!
- 用Delphi查找Word中文字并输出问题 100大洋4U
- 关于Image的图片切换问题!
- 寻求devexpress flowchart 1.2.1版本,可以加分到1200,谢谢
- 简单问题:api 能不能直接得到高字节和低字节
- 如何在delphi里结束外部程序?
- 在dbgrid中怎么样才能象stringgrid那样 例如…………解决就给200分
要实现你的要求可能有两种办法
1、写一堆系统的钩子。自己分析截获的东西,确定变化的区域
2、使用Mirror Dirver。这个可能是目前最好的实现方式了,在Win2000的DDK中例子,可以模仿。不过挺难的。