【问题标题】:efficiently acquiring a screenshot of the windows desktop高效获取windows桌面截图
【发布时间】: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


【解决方案1】:

http://www.codeproject.com/KB/dialog/screencap.aspx

此页面有几种不同的截屏方式。他们使用的 DirectX 方法似乎很简单。

除了那篇文章中提到的内容之外,我认为没有比捕获桌面更有效的方法了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    • 2011-09-24
    • 1970-01-01
    • 2021-02-09
    • 2020-08-08
    相关资源
    最近更新 更多