簡體   English   中英

使用DirectX 11進行桌面捕獲

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM