• λ我爱Aspx >> Asp.Net >> 如何提高截取屏幕的速度?
  • 如何提高截取屏幕的速度?

  • :未知  Դ:internet  :2007-5-5 19:49:13  ؼ:
  • 作者: Seaky 发表日期: 1999-10-14 23:29:18 返回《VC论坛》 快速返回

    我用如下的方法截取屏幕,但我发现截取整个800x600x24屏幕需约200ms,有没有更快的方法?

    越快越好!

    HDC hScrDC,hMemDC;

    HBITMAP hBitmap,hOldBitmap;

    hScrDC=CreateDC("DISPLAY",NULL,NULL,NULL);

    hMemDC=CreateCompatibleDC(hScrDC);

    hBitmap=CreateCompatibleBitmap(hScrDC,nWidth,nHeight);

    hOldBitmap=(HBITMAP)SelectObject(hMemDC,hBitmap);

    BitBlt(hMemDC,0,0,nWidth,nHeight,hScrDC,nX,nY,SRCCOPY);

    hBitmap=(HBITMAP)SelectObject(hMemDC,hOldBitmap);

    谢谢各位。

    补充日期: 1999-10-14 23:32:06

    smalltalk 1999-10-02 23:30:53

    把BitBlt换成其他的函数试试,

    比如StretchBlt 或者 StretchDIBits.

    或许会快很多的。

    Seaky (555079468) 1999-10-05 08:39:29

    我试了一下StretchBlt函数和BitBlt函数的效果几乎一样,我想StretchDIBits也差不到哪儿去吧!

    我觉得应该换个角度...

    我现在用DirectDraw,且已获得主表面的指针但不知下面该怎么做?

    是否是这样...

    LPDIRECTDRAWSURFACE lpDDSPrimary;

    HDC lphDC=NULL;

    HBITMAP hBitmap;

    lpDDSPrimary->GetDC(&lphDC);

    hBitmap=CreateCompatibleBitmap(lphDC,nWidth,nHeight);

    ...

    Seaky (555079468) 1999-10-08 22:17:11

    我已知获得主表面的指针后怎么做。

    用Lock获取当前帧,然后获得当前屏幕的数据指针“scr”。

    但是,我发现这种方法速度仍然不是很快!

    我需要抓一次800x600x24的屏幕只需50ms左右的时间!

    DirectDraw的高手门,你们在哪儿?

    tengel 1999-10-09 11:21:37

    其实用Lock锁住之后,你一个点一个点的取位图肯定很慢,能不能使用像汇编的REP MOVS 来做呢,我也不太清楚

    Ҷƪл˵?
  • һƪ评论:软件创业再度面临生死劫
    һƪ中关村能成为下一个硅谷吗? -- 李开复观点