截屏到 Direct2D 兼容位图
Screen capture to Direct2D compatible bitmap
我需要在给定 HWND
句柄的情况下捕获 windows 的屏幕并将捕获存储在 ID2D1Bitmap
对象中,以便通过我的渲染目标绘制此位图.
我怎样才能达到这个结果?
Direct2D 不提供此类功能。
一种可能的方法是,如果您首先通过 GDI
(1) 捕获屏幕,然后从返回的位图句柄 (2) 创建一个 ID2D1Bitmap
。
正在获取 HBITMAP
- 检查此答案:。您需要 HBITMAP hbDesktop = CreateCompatibleBitmap( hdc, width, height);
之前的部分 hbDesktop
变量将包含屏幕捕获位图的句柄。
从 HBITMAP
创建一个 ID2D1Bitmap
- 检查这个答案:。它将一个图标复制到 ID2D1Bitmap
,但工作流程是相同的。除了:
hIcon := SendMessage(Handle, WM_GETICON, ICON_BIG, 0);
....
wicFactory.CreateBitmapFromHICON(hIcon, wicBitmap);
您必须更改为:
wicFactory.CreateBitmapFromHBITMAP(hbDesktop, wicBitmap);
我需要在给定 HWND
句柄的情况下捕获 windows 的屏幕并将捕获存储在 ID2D1Bitmap
对象中,以便通过我的渲染目标绘制此位图.
我怎样才能达到这个结果?
Direct2D 不提供此类功能。
一种可能的方法是,如果您首先通过 GDI
(1) 捕获屏幕,然后从返回的位图句柄 (2) 创建一个 ID2D1Bitmap
。
正在获取
HBITMAP
- 检查此答案:。您需要HBITMAP hbDesktop = CreateCompatibleBitmap( hdc, width, height);
之前的部分hbDesktop
变量将包含屏幕捕获位图的句柄。从
HBITMAP
创建一个ID2D1Bitmap
- 检查这个答案:。它将一个图标复制到ID2D1Bitmap
,但工作流程是相同的。除了:hIcon := SendMessage(Handle, WM_GETICON, ICON_BIG, 0); .... wicFactory.CreateBitmapFromHICON(hIcon, wicBitmap);
您必须更改为:
wicFactory.CreateBitmapFromHBITMAP(hbDesktop, wicBitmap);