您的位置:程序门 -> .net技术 -> c#



求抓屏效率最高的程序


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求抓屏效率最高的程序
发表于:2007-05-07 16:32:41 楼主
我写了一个抓屏的小软件,抓屏的代码用的是
private   image   getscr()      
{      
        int     w=system.windows.forms.screen.primaryscreen.bounds.right;
        int   h=system.windows.forms.screen.primaryscreen.bounds.bottom;

        intptr   scrwnd       =       getdesktopwindow();      
        intptr   hdcscr       =       getwindowdc(scrwnd);      
        intptr   hdcmem       =       createcompatibledc(hdcscr);      
        intptr   bmpmem       =       createcompatiblebitmap(hdcscr,w,h);//gdi内存图像      
        bmpmem   =       selectobject(hdcmem,bmpmem);//把bmpmem弄进去      
        bitblt(hdcmem,0,0,w,h,hdcscr,0,0,srccopy);//拷贝dc      
        bmpmem   =       selectobject(hdcmem,bmpmem);//把bmpmem弄出来      
        deletedc   (hdcmem);releasedc       (scrwnd,hdcscr);//处理后事      
        image   bmp       =       image.fromhbitmap(bmpmem);      
        deleteobject   (bmpmem);//清理
        return   bmp;      
}  

这个api
但是这个代码的效率明显不高呀,开了一组线程分别使用他们的时候(不是并发的,加了锁的,比如每隔100纳秒就抓一次屏幕),但抓的时候屏幕有明显的卡的现象,请问还有没有其他高效率的抓屏程序呀?
发表于:2007-05-07 17:55:281楼 得分:0
>   每隔100纳秒!!!

不会吧,你这要求也太高了吧。电影也不过每秒30张。
你到底是要静态图象还是录象啊?


发表于:2007-05-07 18:13:322楼 得分:0
毫秒就够恐怖了~~还纳秒....
发表于:2007-05-07 18:24:263楼 得分:0
哈哈!   用vs2005自带的方法效率会更高...

代码如下:

image   myimage   =   new   bitmap(300,   200);
graphics   g   =   graphics.fromimage(myimage);
g.copyfromscreen(new   point(cursor.position.x   -   150,   cursor.position.y   -   25),   new   point(0,   0),   new   size(300,   200));
intptr   dc1   =   g.gethdc();
g.releasehdc(dc1);
this.picturebox1.image   =   myimage;    
myimage.save( "c:\\1.jpeg ");
发表于:2007-05-07 18:25:554楼 得分:0
呵呵,不好意思,是我打错了,是100毫秒,也就是一秒抓10张,然后做成swf动画使用
发表于:2007-05-07 18:27:105楼 得分:0
我用的是vs2003,好象没有copyfromscreen吧
发表于:2007-05-07 18:30:016楼 得分:0
是!   在vs才新加的...
发表于:2007-05-07 18:49:417楼 得分:0
2005可以的
发表于:2007-05-07 21:35:538楼 得分:0
那在2003中有什么方法呢?


快速检索

最新资讯
热门点击