我正在从事某个项目,其任务是将位图(当前为 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 上制作它?
提前感谢任何想法如何解决我的问题。