检测 WPF/Direct3D 表面中的脏矩形?

Detect dirty rectangles in WPF/Direct3D surfaces?

我正在试验远程屏幕机制,我正在将更新的屏幕截图推送到客户端(浏览器)。我已成功实现 Win32 挂钩,将更新的矩形发布到管理器(嗅探 WM_PAINT 和相关消息)。

但是,WPF 应用程序使用 Direct3D 表面,因此侦听 windows 消息没有多大帮助。

有没有办法拦截这些表面,弄脏 rectangles/regions(例如,当重绘控件或其他组件时)?

似乎没有办法做到这一点。

我在这种情况下的解决方案是频繁执行 BitBlt(),并分析当前和先前像素缓冲区之间的差异。然后我将屏幕分成固定 widths/heights 的单元格,并跟踪每个单元格的变化。