[英]Desktop capture using directX 11
我正在嘗試使用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捕獲桌面圖像? 如果有人可以回答,那將非常有幫助。
如果創建了交換鏈,則可以使用交換鏈獲取任何緩沖區,主要緩沖區或輔助緩沖區。
D3D11.Texture2D backBuffer = swapChain.GetBackBuffer<D3D11.Texture2D>(0)
第二種方法:在SlimDX中,您可以使用Resource.FromSwapChain方法獲取后緩沖
using (var resource = Resource.FromSwapChain<Texture2D>(swapChain, 0))
renderTarget = new RenderTargetView(device, resource);
有關詳細信息,請查看此鏈接,此人已對其詳細說明了https://slimdx.org/tutorials/DeviceCreation.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.