我有一個窗體窗體被另一個過程繪製在頂部。如果我嘗試複製使用PrintWindow
或設備場景複製的窗口形象,只是我的窗口下方顯示出來:它畫窗口後獲取圖像在窗口上繪製
:它是由另一個進程畫上之前
窗口
窗口,我得到當我做PrintWindow
或BitBlt的:
是否可以讀取窗口中的窗口中繪製直接而不發送油漆的說法?我可以直接從顯卡讀取它嗎?
我有一個窗體窗體被另一個過程繪製在頂部。如果我嘗試複製使用PrintWindow
或設備場景複製的窗口形象,只是我的窗口下方顯示出來:它畫窗口後獲取圖像在窗口上繪製
:它是由另一個進程畫上之前
窗口
窗口,我得到當我做PrintWindow
或BitBlt的:
是否可以讀取窗口中的窗口中繪製直接而不發送油漆的說法?我可以直接從顯卡讀取它嗎?
如果我是正確的,您想複製由某些DirectX進程渲染的窗口?
你可以這樣做,但你需要明白,你不能直接從窗口複製內存,因爲Windows窗體沒有你的圖像,它只有一個佔位符渲染圖像。 這只是一種錯覺,圖像是在表單內呈現的。 你需要做的是從圖形卡複製內存,但不幸的是我不知道該怎麼做。
最簡單的想法是獲得像alt +打印屏幕的窗口截圖,刪除邊框並將該圖像複製到您的窗口。
也許這將幫助http://www.codeproject.com/Articles/274461/Very-fast-screen-capture-using-DirectX-in-Csharp
德米特里是正確的。
你只能做一個CopyFromScreen,他建議:
Capture the Screen into a Bitmap
您可以修改源代碼來創建大作爲你的窗口位圖和複製屏幕
的DirectX違反規定的只是一部分,你不能讓PrintWindow()
工作。使用Graphics.CopyFromScreen()
也不起作用,它有一個嚴重的錯誤,它會阻止您傳遞正確的CopyPixelOperation值。在Windows 8中由Windows本身解決的一個,你不能依賴它。您需要回退到BitBlt()
。關鍵選項是CopyPixelOperation.CaptureBlt
,以便複製中包含視頻疊加層。您將在this answer中找到所需的代碼。
鏈接答案中的解決方案非常棒! – 2014-04-05 05:02:14
你想製作截圖嗎? – 2013-05-08 04:17:40
你必須顯示一些代碼。還有,你是在用另一個進程*來描繪你的意思。 *如果我嘗試複製窗口圖像*,在哪裏? – 2014-03-30 03:12:52
你可以使用'CopyFromScreen'方法獲取屏幕:http://stackoverflow.com/questions/362986/capture-the-screen-into-a-bitmap – Dmitry 2014-03-30 08:12:56