2

我正在从事某个项目,其任务是将位图(当前为 HBITMAP/bitblt/alphablend)绘制到所有可见窗口(即不属于我的应用程序的窗口)的非客户区域。它必须非常快地完成——当窗口移动、调整大小等时,位图会更新。此外,必须在该位图上应用某种模糊算法。它应该适用于 Win7 和 Win8(因此不需要 XP)。

我已经设法与 GDI 一起正常工作。我将 GetWindowDC、GetWindowRect 和 AlphaBlend 位图获取到缓冲区 (CreateCompatibleDC/CreateCompatibleBitmap) 中,然后将其 BitBlt 到 GetWindowDC 中。这工作得很好......除了......它没有我想要的那么快。如果我在位图上应用模糊算法,那么一切都慢得要命。

所以我的问题是如何提高速度?我正在考虑硬件加速绘图。

a) 我尝试了与 GDI 兼容的 Direct2D(使用 ID2D1DCRenderTarget+BindDC),但它比纯 GDI 慢得多。

b) 我正在考虑 Direct3D。问题是我可能不知道如何使用它。如果我调用 D3D10CreateDeviceAndSwapChain 并将交换链的 OutputWindow 设置为我的应用程序的 HWND,则它返回 S_OK 但是当我将 OutputWindow 设置为任何外部窗口的 HWND 时,该方法将失败。所以我不确定如何渲染到外国窗口。

c)如何在图像的一部分上正确应用模糊?我发现了很多算法,但它们都是在 CPU 上处理的。如何在 GPU 上制作它?

提前感谢任何想法如何解决我的问题。

4

1 回答 1

0

您是否考虑过使用 DComp?为什么使用 DComp 可能是合适的,看看这个:http: //msdn.microsoft.com/en-us/library/windows/desktop/hh449195%28v=vs.85%29.aspx

有关 DComp 是什么的简要总结(来自 MSDN):

Microsoft DirectComposition 是一个 Windows 组件,可通过变换、效果和动画实现高性能位图合成。应用程序开发人员可以使用 DirectComposition API 创建具有视觉吸引力的用户界面,这些界面具有从一种视觉效果到另一种视觉效果的丰富流畅的动画过渡。

DirectComposition 通过实现高帧率、使用图形硬件以及独立于 UI 线程运行来实现丰富而流畅的过渡。DirectComposition 可以接受由不同渲染库绘制的位图内容,包括 Microsoft DirectX 位图和渲染到窗口的位图(HWND 位图)。此外,DirectComposition 还支持各种变换,例如 2D 仿射变换和 3D 透视变换,以及剪裁和不透明度等基本效果。

DirectComposition 旨在简化合成视觉效果和创建动画过渡的过程。如果您的应用程序已包含渲染代码或已使用推荐的 DirectX API,您只需做最少的工作即可有效地使用 DirectComposition。

于 2013-02-01T08:21:08.290 回答