TX_*_*TX_ 5 gdi screen-capture bitblt visual-c++
我使用以下代码来捕获具有GDI函数的屏幕:
// Prologue:
int iScreenWidth = GetSystemMetrics(SM_CXSCREEN);
int iScreenHeight = GetSystemMetrics(SM_CYSCREEN);
HDC hScreenDC = GetDC(0);
HDC hCaptureDC = CreateCompatibleDC(hScreenDC);
HBITMAP hCaptureBitmap = CreateCompatibleBitmap(hScreenDC, iScreenWidth, iScreenHeight);
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hCaptureDC, hCaptureBitmap);
// Capture:
BitBlt(hCaptureDC, 0, 0, iScreenWidth, iScreenHeight, hScreenDC, 0, 0, SRCCOPY);
// --- ... --- //
// Epilogue:
SelectObject(hCaptureDC, hOldBitmap);
DeleteObject(hCaptureBitmap);
DeleteDC(hCaptureDC);
ReleaseDC(0, hScreenDC);
Run Code Online (Sandbox Code Playgroud)
问题是:BitBlt函数是WAY当Aero是打开慢-它需要近50毫秒(这对我来说是不可接受的,因为我需要捕捉多次排在第二).
BitBlt直接从视频硬件获取像素数据.但是在我的测试机器(即Radeon 5470和Radeon 4850)中显卡非常好,所以我不明白什么是错的.我知道这些卡(任何现代卡)在2D中并不像3D那样好,但是我认为简单的blit操作不应该花费50ms.
那么,请你建议做什么?在我的情况下,任何一种"hackish"解决方案(只要它稳定工作)都可以.
目标系统是Win7 x64,32位代码.
提前致谢!
| 归档时间: |
|
| 查看次数: |
3895 次 |
| 最近记录: |