【发布时间】:2011-07-14 15:26:18
【问题描述】:
有没有比下面的代码更有效的方法来获取 Windows 桌面的副本(使用 GDI 或任何其他库)
HDC dcDesktop;
HDC dcMem;
HBITMAP hbmpMem;
HBITMAP hOriginal;
BITMAP bmpDesktopCopy;
dcDesktop = GetDC( GetDesktopWindow() );
dcMem = CreateCompatibleDC( dcDesktop );
hbmpMem = CreateCompatibleBitmap( dcMem, m_lWidth, m_lHeight );
BitBlt( dcMem, 0, 0, m_lWidth, m_lHeight, dcDesktop, 0, 0, SRCCOPY );
// Copy the hbmpMem to the desktop copy
GetObject(hbmpMem, sizeof(BITMAP), (LPSTR)&bmpDesktopCopy);
【问题讨论】:
-
对我来说这看起来很有效。您衡量“效率”的标准是什么?
-
您遇到了什么性能问题?
-
如果您需要反复获取屏幕截图,我认为使用 DirectX 可能会提高效率。
-
你能提供一个使用 DirectX 的例子吗?
-
这真的有效吗?我的经验是你需要用
dcDesktop打电话给CreateCompatibleBitmap,而不是dcMem。另外,您错过了对SelectObject的调用以将位图选择到 DC。
标签: c++ windows performance bitmap gdi