以前讨论已经结贴,地址如下:
http://community.csdn.net/Expert/topic/3258/3258617.xml?temp=.8838617
---------------------------------------------
关于远程屏幕监控,我的大概思路是:
    1.在本地定时截取屏幕,并将截取的屏幕分成多块,例如4×4 = 16块,分别对每一块进行传输。
    2.定时截取了新的屏幕以后,对每一块图像进行新旧比较,如果发生改变则传输,反之则不传输,这样可以减少网络通讯的数据量,在屏幕长期不变动的情况下就不进行传输。
    3.传输之前可以加入图像压缩算法,将图像压缩后再进行传输。       不知大家有什么比较好的思路,或者有现成的源码请发给我参考一下!
    [email protected]
    多谢~
---------------------------------------------
changlele(梦幻水晶)可以不用传送那么多数据的
利用祯比较算法,第一幅图设置为主祯
然后后面的图片和主祯进行比较,只传送变化的部分
关于帧比较算法我多说几句:
开始抓取第一个帧的时候设为主帧,然后抓取第二个帧。
第二个帧和第一个帧进行异或操作(矩阵)。然后去除
异或操作后矩阵内值为零的点(值为0的点就是没有变化
的点),然后传送这个矩阵中非零的点。这是帧比较算
法的大体思路。传送的时候最好采用一些压缩算法。
无损压缩:哈夫曼算法
有损压缩:JPG,MPG都是很好的方法
---------------------------------------------
    大家有什么想法欢迎讨论,或者有现成的源码请发给我参考一下!
    [email protected]
    多谢~

解决方案 »

  1.   

    其实使用驱动是最好的办法。影响远程监控这类软件的最大的问题有几点:
    1 截屏速度慢,一般都是使用BitBlt函数,还可以使用directx,但是已经被证实并不能提高多少效率。
    2 截屏的时机不好选择,象winvnc使用的钩子方法,在某些情况下会实效(比如控制台程序)
    3 如果采用分帧比较,传输差值的办法,比较两帧图片本身就是比较耗时的操作。如果使用驱动,可以一次性解决上面的三个问题:
    1 驱动传输速度会比BitBlt快很多。
    2 只有在屏幕真正变化的时候才会传输数据。
    3 可以精确的知道某块数据发生了变化,不再需要比较。在Win2000下可以使用Mirror Driver
    呵呵,新手,瞎扯几句。
      

  2.   

    用lzw压缩解压速度都很快.我曾进做利用vckbase上的lzw压缩程序做过一个远程控制程序,效果很不错,楼主需要请给我留言.
      

  3.   

    建议如下:
      1,用LZW进行压缩。
      2,先转换成256色。
      

  4.   

    to shootingstars(有容乃大,无欲则刚):驱动方面没有接触过,能不能有些更具体的想法?to howtotell(从何谈起):很荣幸学习你的程序,我的信箱:[email protected],谢谢!to changlele(梦幻水晶):呵呵,再开帖子因为一个帖子只能给100分,很多好想法,分太少了。
      

  5.   

    好的想法都说完了,还有什么说的,晕,要知道这样。我就把想说的分为2次说
    这样能多赚些专家分对了,刚才想到一点。如果用JPG方式的话,建议你传送的时候就不要每次都传送
    Jpg的文件头等一些重复的数据了,只需传送JPG内容的那部分。开始时就把JPG头
    都定义好,就传一个副本即可,毕竟网络传送传送的数据越少越好。这样性能能快点
      

  6.   

    将数据送给DirectShow的compressor进行压缩(比如用DivX),再进行传送,数据量小
    服务端用DirectShow进行显示,或保存(可存成avi)
      

  7.   

    用DirectX吧,不知道可不可以,我刚才就发过帖子了,问了和这个有点关系的问题,一端用directx保存显存数据→比较缩小范围→lzw打包,一端接收 lzw展开→写入临时内存→写入离屏(我觉得这里复制到离屏比较好,否则可能会发生闪烁)→……→到主页面,另外主页面设置为 独占模式,256色速度是快了点,不过这个颜色真是 惨不忍睹…,我还是觉得既然监控, 就不能让别人知道吧?否则就叫 共享屏幕了,所以我觉得还是应该按照远程显示模式来传输比较好吧,另外,推荐用DirectX的原因是 GDI无法 截取DirectX环境下的画面,比如MediaPlayer播放时的画面…,不过听别人说,开2个MediaPlayer,然后隐藏一个,但是这个必须要一直播放,另外一个也一直播放,这样GDI就能截取到这个画面了。我觉得JPG方式不好,同样都是压缩,但是属于JPG有损画质,另外JPG也不能再用LZW进行压缩了。