2013-05-08 163 views
2

我有一個窗體窗體被另一個過程繪製在頂部。如果我嘗試複製使用PrintWindow或設備場景複製的窗口形象,只是我的窗口下方顯示出來:它畫窗口後獲取圖像在窗口上繪製

enter image description here

:它是由另一個進程畫上之前

窗口

enter code here

窗口,我得到當我做PrintWindow或BitBlt的:

enter image description here

是否可以讀取窗口中的窗口中繪製直接而不發送油漆的說法?我可以直接從顯卡讀取它嗎?

+0

你想製作截圖嗎? – 2013-05-08 04:17:40

+1

你必須顯示一些代碼。還有,你是在用另一個進程*來描繪你的意思。 *如果我嘗試複製窗口圖像*,在哪裏? – 2014-03-30 03:12:52

+2

你可以使用'CopyFromScreen'方法獲取屏幕:http://stackoverflow.com/questions/362986/capture-the-screen-into-a-bitmap – Dmitry 2014-03-30 08:12:56

回答

1

如果我是正確的,您想複製由某些DirectX進程渲染的窗口?

你可以這樣做,但你需要明白,你不能直接從窗口複製內存,因爲Windows窗體沒有你的圖像,它只有一個佔位符渲染圖像。 這只是一種錯覺,圖像是在表單內呈現的。 你需要做的是從圖形卡複製內存,但不幸的是我不知道該怎麼做。

最簡單的想法是獲得像alt +打印屏幕的窗口截圖,刪除邊框並將該圖像複製到您的窗口。

也許這將幫助http://www.codeproject.com/Articles/274461/Very-fast-screen-capture-using-DirectX-in-Csharp

0

德米特里是正確的。
你只能做一個CopyFromScreen,他建議:
Capture the Screen into a Bitmap
您可以修改源代碼來創建大作爲你的窗口位圖和複製屏幕

4

的DirectX違反規定的只是一部分,你不能讓PrintWindow()工作。使用Graphics.CopyFromScreen()也不起作用,它有一個嚴重的錯誤,它會阻止您傳遞正確的CopyPixelOperation值。在Windows 8中由Windows本身解決的一個,你不能依賴它。您需要回退到BitBlt()。關鍵選項是CopyPixelOperation.CaptureBlt,以便複製中包含視頻疊加層。您將在this answer中找到所需的代碼。

+0

鏈接答案中的解決方案非常棒! – 2014-04-05 05:02:14