屏幕捕获为 Direct2D 兼容位图

Nic*_*ick 3 c++ rendering screenshot bitmap direct2d

我需要捕获给定窗口HWND句柄的窗口屏幕并将捕获结果存储在ID2D1Bitmap对象中,以便通过渲染目标绘制此位图。

我怎样才能达到这个结果?

Pet*_*tov 5

Direct2D 不提供此类功能。

一种可能的方法是首先通过 (1) 捕获屏幕GDI,然后ID2D1Bitmap从返回的位图句柄 (2) 创建一个。

  1. 获取HBITMAP- 检查此答案: /sf/answers/361498721/。您需要该部分,直到HBITMAP hbDesktop = CreateCompatibleBitmap( hdc, width, height);变量hbDesktop将包含屏幕捕获位图的句柄。

  2. ID2D1Bitmap从 a创建HBITMAP- 检查这个答案: https: //stackoverflow.com/a/27500938/3962893。它将图标复制到ID2D1Bitmap,但工作流程是相同的。除了:

    hIcon := SendMessage(Handle, WM_GETICON, ICON_BIG, 0); .... wicFactory.CreateBitmapFromHICON(hIcon, wicBitmap);

    你必须更改为:

    wicFactory.CreateBitmapFromHBITMAP(hbDesktop, wicBitmap);