2013-01-02 111 views
1

我想創建一個小項目,其中我需要捕獲/讀取視頻幀緩衝區並計算屏幕的平均RGB值。
我不需要在屏幕上寫任何東西。我在Windows中這樣做。如何讀取窗口中的視頻幀緩衝區

任何人都可以幫助我的任何Windows API,它將讀取視頻幀緩衝區和計算平均RGB值?

我所知道的是,我需要編寫一個內核驅動程序,它具有讀取幀緩衝區的權限。
1.這是唯一的解決方案嗎?
2.是否有其他方式讀取幀緩衝區?
3.是否有算法從幀緩衝區數據計算RGB值?

+0

你需要每一幀嗎?或者你可以每隔幾秒對屏幕進行一次採樣(例如打印屏幕)?後者很容易。 – selbie

+0

需要每秒對屏幕進行採樣,然後計算緩衝區的平均RGB值。 – kishorev

+0

您將不會有CPU週期遍歷每個幀的每個像素。您需要從屏幕上的每個NxN區域採樣一個像素。其中N表示10或20. – selbie

回答

1

如果你想要非常好的性能,你可能需要使用directx,並將backbuffer捕獲到紋理。使用mipmap,它會自動創建下降樣本到1X1。拿起那1個像素的顏色,你就可以走了。

祝你好運,但。當我們說話時,我正在努力實現這一點。我正在爲我的房間創建一個環境光線控制。我使用設備上下文和StretchBLT獲得大約15FPS。如果我通過GetPixel()獲取1個像素,只能獲得不錯的表現。這是一個i5 3570K @ 4.5GHz

但是,使用directx方法,您可以在技術上獲得數百甚至數千幀/秒。 (當我製作一個三角形時,我的660可以達到大約24,000 FPS,不會太慢,減去CPU的通話時間。)