【问题标题】:How to read video frame buffer in windows如何在 Windows 中读取视频帧缓冲区
【发布时间】:2013-01-02 10:23:44
【问题描述】:

我正在尝试创建一个小项目,我需要在其中捕获/读取视频帧缓冲区并计算屏幕的平均 RGB 值。
我不需要在屏幕上写任何东西。我在 Windows 中执行此操作。

谁能帮助我使用任何可以读取视频帧缓冲区并计算平均 RGB 值的 Windows API?

我开始知道我需要编写一个内核驱动程序,它可以读取帧缓冲区。

  1. 这是唯一的解决方案吗?
  2. 还有其他读取帧缓冲区的方法吗?
  3. 是否有算法可以根据帧缓冲区数据计算 RGB 值?

【问题讨论】:

  • 你需要每一帧吗?或者您可以每隔几秒钟对屏幕(例如打印屏幕)进行一次采样吗?后者很容易。
  • 需要每秒采样一次屏幕,然后计算缓冲区的平均RGB值。
  • 您不会有 CPU 周期来迭代每一帧的每个像素。您需要从屏幕上的每个 NxN 区域采样一个像素。其中 N 表示 10 或 20。
  • 是的,是的。但是如何获取视频帧缓冲区呢?
  • 在此站点中搜索“screen capture bitblt”。 BitBlt() 技术是最常用的方法。但如果这不符合性能目标,请在此网站和互联网上搜索“Screen Capture DirectShow”

标签: windows video buffer frame


【解决方案1】:

如果您想要非常好的性能,您可能必须使用 directx 并将后缓冲区捕获到纹理。使用 mipmaps,它会自动创建下采样到 1X1。只需抓住那 1 个像素的颜色就可以了。

不过,祝你好运。在我们说话的时候,我正在努力实现这一点。我正在为我的房间创建环境光控制。使用设备上下文和 StretchBLT,我得到了大约 15FPS。只有当我使用 GetPixel() 抓取 1 个像素时才能获得不错的性能。那是 i5 3570K @ 4.5GHz

但使用 directx 方法,从技术上讲,您每秒可以获得数百甚至数千帧。 (当我制作一个旋转三角形时,我的 660 获得大约 24,000 FPS。它不会太慢,减去 CPU 调用。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 2020-06-30
    相关资源
    最近更新 更多