【发布时间】:2016-01-21 20:02:59
【问题描述】:
我正在尝试使用 Direct 11 和 SlimDX 捕获桌面图像。但我不知道如何使用directX 11 为显示器桌面获取后台缓冲区。我用这样的 C# 试过这个。为什么它没有得到桌面的后台缓冲区?
[DllImport("user32.dll", SetLastError = false)]
static extern IntPtr GetDesktopWindow();
Device device1;
SwapChain swapChain1;
var description1 = new SwapChainDescription()
{
BufferCount = 1,
Usage = Usage.ReadOnly,
OutputHandle = GetDesktopWindow(),
IsWindowed = true,
ModeDescription = new ModeDescription(0, 0, new Rational(60, 1), Format.R8G8B8A8_UNorm),
SampleDescription = new SampleDescription(1, 0),
Flags = SwapChainFlags.AllowModeSwitch,
SwapEffect = SwapEffect.Sequential
};
Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, description, out device1, out swapChain1);
var resource1 = Resource.FromSwapChain<Texture2D>(swapChain1, 0);
SlimDX.Direct3D11.Texture2D.SaveTextureToFile(context, resource1, ImageFileFormat.Png, "D:\\MyImage");
如果不是这种方式行不通,我如何使用 directX 11 捕获桌面图像? 如果有人能回答,那将非常有帮助。
【问题讨论】:
-
不清楚。您想要后缓冲还是监控桌面?
-
我想用 DirectX 11 获取桌面窗口的图像。所以我需要获取桌面窗口的后台缓冲区。 DirectX 9 有一个名为“GetBackBuffer”的函数来获取桌面的后台缓冲区。但我找不到使用 DirectX 11 获取桌面后台缓冲区的任何功能或任何方法。
标签: directx screenshot directx-11 directx-9 slimdx