怎么智能地抓取屏幕图像,请有图像编程经验的专家来看看小弟我的设想

如何智能地抓取屏幕图像,请有图像编程经验的专家来看看我的设想
屏幕大小是1024*768
以每2秒抓取一次屏幕图像并到服务端
抓取屏幕图像并影射到内存大小100K左右
如屏幕没有改变同样需要发送100K大小的数据
能不能只抓取屏幕改变的部分发送到服务端,由服务端收到数据后更改指定的部分
比如打开一个300*200的窗口,这时只抓取300*200改变的那部分发送到服务端,由服务端改变图像中300*200的那一部分。
请专家给点思路,或告知小弟那里有着方面的质料。

------解决方案--------------------
没有搞过

朗悦,孙方好像出了本 网络方面的编程书,上面有个截屏发给服务器的例子
------解决方案--------------------
有个叫vnchook的DLL源码,做的就是LZ想要的勾当,你去下载一个,就完事了。
------解决方案--------------------
哇,楼上两位我喜欢
------解决方案--------------------
两副图像直接做减法,结果图像中,未变化的部分为黑色,选一个很小的灰度值为阈值做二值化,白色的部分就是要找的变化区域,如果是新开一个窗口的话,那么这个白色部分就是一个矩形,查一下边缘,可以得到四个顶点
------解决方案--------------------
vnc太大?就几百K吧!?
其实LZ的这个问题,还不算复杂。要知道截屏是很消耗CPU的,而LZ要求每2秒才抓取一次,这样CPU使用率就可以忽略了,可以每次都抓全屏,将两次屏幕作异或,异或后相同的部分有一堆的0,这时可以用GDI+的CImage将这个BMP结果转换为PNG,PNG对这种连续相同数字的压缩率是非常高的。将这个PNG传给另一个终端,再转换为BMP,再做一次异或就还原回来了。

如果截屏要求每秒10-20次的话,上面那套就完全行不通了,因为上面那种方法会使CPU使用率达到100%。这样就有了用vnc的必要,vnc可以获知屏幕变化的区域,并把变化的矩形范围坐标发给调用它的exe程序。exe记录下这个范围,但不立刻截屏,而是将监测到的变化的区域进行合并,最后需要发送的时候再截屏(截屏的区域越小,CPU的使用率越低),发送给另一个终端。这样可以在一定程度上减少CPU的消耗。

不过,最有效率的还是Mirror Driver,可惜驱动我不会。
------解决方案--------------------
远程桌面好像发送的是操作系统可识别的命令,由另一端绘制实现的
------解决方案--------------------
类似Mirror Driver的技术,驱动层的截图,效率很高。
不过Windows DDK开发基础的,想用这个估计还是太难了。
------解决方案--------------------
能不能只抓取屏幕改变的部分发送到服务端

这个就看你的算法了,前景减后景,差值发送出去,再把差值画上.
------解决方案--------------------
远程桌面好像发送的是操作系统可识别的命令,由另一端绘制实现的
----------
恩,我也有这种认为,似乎通过截图然后发送的方式太难实现且效果不会很好。学习,期望高手出招^_^