屏幕捕捉(50分)

  • 主题发起人 主题发起人 sunwork
  • 开始时间 开始时间
S

sunwork

Unregistered / Unconfirmed
GUEST, unregistred user!
我在编一个程序,将教师机屏幕的内容广播出去给多个学生机,具体是用屏幕拷贝,然后将图片
发送出去,我在屏幕拷贝的时候没有办法将鼠标的形状和位置连同背景图一起拷贝下来,
只能拷贝到背景图,哪位高手可以帮忙,我不胜感激。我是用BCB编程的。
 
如果连鼠标的具体位置都拷贝下来,可能太难,而且鼠标在移动的速度快,你要不停执行
拷贝发送,能来得及吗?建议记录鼠标的位置和形状,然后和屏幕图片一起传过去,
当屏幕图片没有改变的时候,只传鼠标的位置和形状。这样好些。
 
我想只要屏幕有变化就拷贝下来,然后传出去,现在是背景拷贝到了,但是鼠标隐形了,
拷贝不到。如果按照你的方法怎样做,怎样判断屏幕的变化,怎样实现鼠标的位置和形状
和背景图同时传输,可以详细一些说明做法吗?
 
鼠标是硬件鼠标,你抓不到它的图象的。

用hook,获得鼠标位置,得到鼠标当前形状,copy
 
具体怎样做HOOK程序去获取鼠标?
 
何必那么麻烦,模拟PrintScreen键然后从剪贴板拷贝图象给学生发过去不就行了!
 
具体怎样做HOOK程序去获取鼠标?请赐教。给一个示范好吗?
获得鼠标的形状和位置后,怎样和背景图象合成?谢谢各位了。
 
HOOK的例子前面有许多,搜索以下可以找到的.

用DrawIcon画出来(注意要使用DuplicateHandle)



 
printscreen键也只是拷贝到背景图,没有办法拷贝到鼠标。
我想屏幕有变化我才传送图片,这样可以尽量减少网络负担,
我这程序要怎样才能达到要求。用什么函数判断图象的变化?
woodstock的说法是一个解决的方法,但只是传鼠标的形状和位置
怎样在学生机上把原来的鼠标擦掉,画上新的鼠标呢?
 
看看这样行否:
拷屏还是原来的方法。不过你要随时返回鼠标在某控件上的坐标 保存到变量中,
可以在控件的OnMouseMove事件中比较鼠标当前的位置与上一次的坐标,如果有变化就将
鼠标的位置做上去(可以是贴图----在原来的图片上再加一个imageX 并将它的"透明
transparent属性设为true,在imageX.canvas上画出鼠标,不要的时候再用canvas的
pmnotXor模式将原图擦除 在需要的位置重画; 另一种方法就是移动imageX的位置,
当然imageX上已经画好了鼠标,它的transparent属性也为true).
 
我用以下的程序去获取鼠标的形状,但是截不到图,不知道方法是否可行.

TIcon *aico;
aico = new TIcon();
aico->Handle = GetCursor;
Graphics::TBitmap *BMP = new Graphics::TBitmap();
BMP->Width = Screen->Width;
BMP->Height = Screen->Height;
BMP->Canvas->Draw(100,100,aico);
 
有其他人有好的建议吗?
 
我有个办法:传只传图像和鼠标位置,在学生机上用SetCursorPos指定鼠标位置,
就不用自己画鼠标了。。。
 
仅仅传送屏幕内容和鼠标位置(用GetCursorPos),在学生机一端用SetCursorPos
设置鼠标位置
 
sunwork:
我也正在做这样的程序。与你的程序需要实现的目的是一样的。请问sunwork,
你copy屏幕在传送广播,网络的延迟能够忍受吗?我这样做的,无法忍受。
请问,你有什么解决办法?
 
捕获的图像如果不进行处理,
在客户机数量比较多的情况下,会严重占用网络带宽。
比较简单的办法是把每一帧图像用某种算法压缩后发送出去!
高级一些的办法是由比较屏幕变化,只传送不同的象素数据

有个比较好用的屏幕图像通讯协议
remote framebuffer协议
和他的例子VNC
http://www.uk.research.att.com/vnc
很爽啊:)
至于鼠标,捕获它的动作打包发到客户端,在客户端还原
VNC中也有他的例子:)

 
我是把图象压缩成JPEG格式再发送出去,这样的速度可以忍受.
bird所说的高级方法具体怎么只是传送不同象素的数据有没有函数实现这样的功能呢?

 
把图象压缩成JPEG再传送,这样虽然网上的传输带宽要求少了,
但是受监控的机的CPU资源消耗太大,如果你不用实时监控的话可以
采用这种方法,但是如果需要每秒更新1-2次的话,你会发现CPU会
忙个不停,我的PIII/550E 的CPU 占用率高达 33%左右,所以这是不
行的。
 
我也有同感,图象压缩的时候占用的CPU资源确实比较大,如果要连续截取图片的时候系统变
得非常得迟缓,但是没有其他可选的方法,因为直接传送BMP图片带宽要求非常的高。各位
有什么好的建议吗?
 
需要自己写压缩算法: 对于屏幕这样的内容,可以采用RLE压缩算法;对于典型
的24bit的屏幕,可以达到1:4的压缩比率。而且此算法的CPU占用率很低,可以使用.
 

Similar threads

I
回复
0
查看
591
import
I
I
回复
0
查看
571
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部