【问题标题】:Win32 - Fastest way to read desktop pixelsWin32 - 读取桌面像素的最快方法
【发布时间】:2014-05-14 11:21:01
【问题描述】:

我的任务是编写一个(非托管 c++ win32)应用程序,通过网络向另一台计算机显示 Windows CE 5.0 的当前桌面。客户要求原码,我找到的一些VNC码拒绝了。

我有一些工作,但我遇到了吞吐量瓶颈。我能找到获取屏幕像素的唯一方法是使用 CreateDibSection 创建一个 DIB,并使用 Bitblt 将像素复制到缓冲区。在分析我的代码后,我发现在 Windows 7 上,我的应用程序使用的 60% 的 CPU 时间都花在了 Bitblt 上。在 Windows CE 上,它更像是 80%。 我使用每像素 32 位、24 位还是 16 位似乎并不重要。

我的问题是: 有没有比 CreateDibSection 和 BitBlt 更好(更快)的方法来准备整个桌面像素?在我的应用程序中,它将在特定硬件上运行,因此我不需要设备独立性。

【问题讨论】:

  • 首先尝试依赖设备的位图?
  • 你试过用很大的放大镜吗?
  • 是否可以按需提供屏幕截图,或者是否期望能够以 30fps 或介于两者之间的速度观看视频?除非你有很大的预算和大量的时间,否则要求复制 RDP 或 VNC 的功能似乎有点愚蠢。
  • Blitting 到 DIB 部分几乎肯定会涉及像素格式转换。尝试使用兼容的位图(CreateCompatibleDC 和 CreateCompatibleBitmap)并从屏幕到该位图。

标签: c++ windows windows-ce gdi


【解决方案1】:

原始代码的请求是否出于法律问题的动机? Microsoft 在共享源许可证下提供了 cerdisp 应用程序的代码,这正是您所要求的。 至少您可以检查该代码以了解它使用哪些 API 来捕获屏幕图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-17
    • 2014-09-26
    • 2012-02-16
    • 1970-01-01
    • 2015-03-22
    • 2013-05-12
    • 1970-01-01
    • 2012-05-17
    相关资源
    最近更新 更多