2017-06-12 74 views
0

我有這個需求:我想複製視頻圖像的選定部分(它們是來自飛行模擬器的儀表或其他儀器)並將它們複製到小型LCD顯示器上。每個液晶顯示器必須物理複製一臺儀器,從而從源圖像中選擇一個區域。 我打算使用python,但也可能使用其他語言。但是我對圖形沒有任何經驗,我不知道如何從視頻板內存中讀取原始圖像。很多年前,使用EGA和VGA卡時,即使我從未有過這種需求,也很容易。現在我讀到了Windows鎖定了任何直接訪問視頻內存的嘗試。這是真的嗎?如果是的話,該怎麼做? 我打算使用集成視頻板。 感謝您的關注視頻內存拷貝

+0

你提到的Windows ...你可以使用winapi直接在內存中以位圖的形式呈現屏幕內容。在OpenGL中,存在舊的'glReadPixels'或者使用'FBO'或者渲染位圖,但是這涉及到篡改渲染代碼,如果你可以或不可以做到則渲染代碼不清楚。您沒有指定視頻源(圖像/視頻文件,來自某些第三方App,IPC,LAN的真實視頻源?)您沒有指定平臺(gfx訪問與平臺緊密相關) – Spektre

+0

您是對的。來源是一個飛行模擬器,這樣圖像就像一個視頻。操作系統取決於用戶,我將從我自己的應用程序開始,即Win10。目的是將選定的飛行模擬部分(即樂器)轉移到許多不同的設備上,每一個設備都由一個小觸摸屏和一個像Arduino或Raspberry這樣的電路板組成。該板將在LCD上顯示所選儀器的部分(想象一下指南針或雷達),觸摸部分將用於向儀器發送儀器相關命令。 – Salrandazzo

+0

因此,我認爲你不能篡改應用程序代碼...使用winapi ...獲取應用程序的句柄(或整個桌面),並在一段時間內將畫布內容複製到應用程序中...對於樂器,不需要這樣做與太大的FPS ...看到[獲取運行OpenGL的子窗口的截圖(Windows)](https://stackoverflow.com/a/18107834/2521214) – Spektre

回答

0

根據您的整體解決方案,您可能更容易將整個視頻發送到每個小屏幕,並簡單地縮放/裁剪回放以僅顯示所需的部分。

這在帶寬方面效率較低(可能 - 取決於如何壓縮您提取的任何視頻),但避免了必須執行任何處理器和電池耗盡的複雜視頻操作。

如果你的系統是基於Android可以使用TextureView的setTransform做到這一點:https://developer.android.com/reference/android/view/TextureView.html#setTransform(android.graphics.Matrix)

在HTML5中,你可以使用CSS和視頻實現了類似的事情變換:https://www.w3schools.com/cssref/css3_pr_transform.asp

+0

感謝您的回答。目標系統將是一個簡單的液晶顯示器加上一個Arduino或樹莓板,沒有電池問題。帶寬可能是一個問題。但我會考慮你的建議,再次感謝。 – Salrandazzo

+0

遵循您的建議,我可以將整個模擬圖像(視頻)流式傳輸,並且每個遠程設備都可以抓住它的一部分,與儀器顯示相關的部分。我可以在發送端使用python + OpenCV。並且仍然不知道接收端是什麼,取決於設備(Arduino或Raspberry)。 – Salrandazzo