專利名稱:獲取計算機(jī)屏幕圖像的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)圖形圖像顯示技術(shù)領(lǐng)域,具體涉及一種能夠完 整快速地獲取個人計算機(jī)屏幕圖像的方法。
背景技術(shù):
隨著個人計算機(jī)計算能力和圖形圖像處理能力的逐步增強(qiáng),計算機(jī)圖形圖像已從早期的2D位圖和向量應(yīng)用走向支持3D和視頻,甚至 更復(fù)雜地圖像,這給獲取個人計算機(jī)所有顯示內(nèi)容(包括視頻和3D 等需要硬件加速的圖像),并同步地顯示到遠(yuǎn)程終端(如遠(yuǎn)程控制,無 線投影,桌面共享等)或其它顯示設(shè)備中(如無線顯示設(shè)備)帶來很大挑 戰(zhàn),特別是那些實時性要求較高的應(yīng)用。 目前獲取屏幕的方法主要有1) 將個人計算機(jī)顯示適配器的VGA輸出信號作為輸入源,輸入 到視頻采集卡中,由視頻采集卡對輸入的數(shù)據(jù)進(jìn)行處理。這種方案需 增加額外的視頻采集卡硬件,需要對計算機(jī)進(jìn)行硬件改造,設(shè)備配置 復(fù)雜,不具備通用性。2) 禁用個人計算機(jī)顯示適配器的硬件加速功能,使其顯示的圖 像全部繪制到FrameBuffer圖面。通過"定時屏幕拷貝","更新區(qū)屏 幕拷貝","繪圖元語拷貝"以及"屏幕鏡像"等技術(shù)拷貝計算機(jī) FrameBuffer中的位圖數(shù)據(jù)。這種方案需要禁用當(dāng)前顯示設(shè)備的硬件 加速功能,使得在獲取屏幕圖像時,無法正常顯示(或顯示效果很差) 3D/視頻等需要硬件加速的圖像。例如,要獲取在網(wǎng)頁中嵌入視頻的 屏幕時,由于硬件加速功能被禁用,這種方法無法獲取視頻窗口的圖3 )使用HOOK攔截對圖形/圖像硬件加速接口(如 DirectX/OpenGL)的調(diào)用,實時獲取通過顯示適配器硬件加速后的圖 像。這種方案僅能獲取經(jīng)過顯示適配器硬件加速后的圖像數(shù)據(jù)(如3D/ 視頻圖像),對于上面描述的例子,該方法僅能獲取嵌入的視頻圖像, 同樣不能獲得屏幕上顯示的所有圖像。因此,目前尚沒有一個很好的辦法,同時快速地獲取硬件加速圖像 與非硬件加速圖像。發(fā)明內(nèi)容鑒于上述問題,完成了本發(fā)明。本發(fā)明的目的是提供一種能夠完 整快速地獲取個人計算機(jī)屏幕圖像的方法,可以同時快速地獲取硬件 加速圖像和非硬件加速圖像。在本發(fā)明的一個方面,提供了一種獲取計算機(jī)屏幕圖像的方法, 包括步驟獲取非硬件加速圖像的更新區(qū),并將所獲得的更新區(qū)添加 到更新區(qū)列表中;通過攔截圖形/圖像硬件加速接口的調(diào)用,來獲取硬 件加速圖像;合并更新區(qū)列表中的更新區(qū),并從幀緩沖器中獲取合并 后的更新區(qū)的圖像數(shù)據(jù)。此外,根據(jù)本發(fā)明的實施例,所述的方法還包括步驟獲取硬件 加速圖像的顯示信息;基于所述顯示信息,在幀緩沖器中產(chǎn)生相應(yīng)的 更新區(qū);以及將所產(chǎn)生的更新區(qū)添加到更新區(qū)列表中。此外,根據(jù)本發(fā)明的實施例,所述顯示信息包括尺寸,位置和顯 示模式中的至少之一。此外,根據(jù)本發(fā)明的實施例,所述在幀緩沖器中產(chǎn)生相應(yīng)的更新 區(qū)的步驟包括在幀緩沖器的相應(yīng)區(qū)域填充KeyColor,以產(chǎn)生相應(yīng)大 小更新區(qū)。此外,根據(jù)本發(fā)明的實施例,所述的方法還包括步驟產(chǎn)生與繪 制到幀緩沖器的硬件加速圖像相對應(yīng)的更新區(qū);以及將所產(chǎn)生的更新 區(qū)添加到更新區(qū)列表中。此外,根據(jù)本發(fā)明的實施例,所述圖形/圖像硬件加速接口包括 DirectX和/或OpenGL。利用本發(fā)明的上述方案, 一方面,無需添加任何硬件設(shè)備就可以 獲得精確的屏幕顯示圖像,另一方面,可以同時獲取計算機(jī)屏幕硬件 加速圖像與非硬件加速圖像,即完整的獲取計算機(jī)屏幕圖像。此外, 本發(fā)明還能精確地獲取計算機(jī)屏幕的所有更新(包括非硬件加速圖像 和非硬件加速圖像),獲取的數(shù)據(jù)量更小,獲取速度更快。
從下面結(jié)合附圖的詳細(xì)描述中,本發(fā)明的上述特征和優(yōu)點將更明 顯,其中圖1是示出了用于說明根據(jù)本發(fā)明實施例的獲取計算機(jī)屏幕圖像 的方法所采用的軟件模塊之間的關(guān)系的圖;以及圖2是示出了用于說明根據(jù)本發(fā)明實施例的獲取計算機(jī)屏幕圖像 的方法的流程圖。
具體實施方式
下面,參考附圖詳細(xì)說明本發(fā)明的優(yōu)選實施方式。在附圖中,雖 然示于不同的附圖中,但相同的附圖標(biāo)記用于表示相同的或相似的組 件。為了清楚和簡明,包含在這里的已知的功能和結(jié)構(gòu)的詳細(xì)描述將 被省略,否則它們將使本發(fā)明的主題不清楚。圖1是示出了用于說明根據(jù)本發(fā)明實施例的獲取計算機(jī)屏幕圖像 的方法所采用的軟件模塊之間的關(guān)系的圖。如圖1所示,本發(fā)明的方法采用了如下的軟件模塊硬件加速圖 像獲取模塊10,用于通過攔截所有對圖形/圖像硬件加速接口 (例如 DirectX/OpenGL)的調(diào)用,來獲取硬件加速圖像數(shù)據(jù);非硬件加速圖 像獲取模塊20,用于通過更新區(qū)屏幕鏡像技術(shù)獲取非硬件加速圖像更 新,并獲得的更新添加到更新區(qū)列表中;更新區(qū)合并與獲取模塊30, 用于合并更新區(qū)列表中的更新區(qū),并從幀緩沖器(FrameBuffer)中 抓取合并后的屏幕區(qū)域的圖像數(shù)據(jù);以及疊加模塊,用于將硬件加速 圖像獲取模塊10所獲得的硬件加速圖像數(shù)據(jù)與更新區(qū)合并與獲取模 塊30所獲取的圖像數(shù)據(jù)疊加在一起,顯示在屏幕上。圖2是示出了用于說明根據(jù)本發(fā)明實施例的計算機(jī)屏幕圖像的方
法的流程圖。如圖2所示,在本發(fā)明的方法的開始,首先加載非硬件加速圖像 獲取模塊20與硬件加速圖像獲取模塊10。在當(dāng)前顯示的圖像是全屏硬件加速的圖像的情況下,通過硬件加 速圖像獲取模塊10從通過攔截對圖形/圖像硬件加速接口的調(diào)用來從 全屏硬件加速程序70實時獲取硬件加速圖像數(shù)據(jù)。在當(dāng)前顯示的圖像是非硬件加速圖像的情況下,非硬件加速圖像 獲取模塊10通過更新區(qū)屏幕鏡像技術(shù)獲取應(yīng)用程序(GDI) 60要在 更新區(qū)列表中添加的所有非硬件加速圖像的更新,并將該更新添加到 指定的更新區(qū)列表55中,在更新區(qū)列表55中僅放置更新的區(qū)域坐標(biāo)。在當(dāng)前顯示的圖像是由繪制到幀緩沖器50中的硬件加速程序繪 制到幀緩沖器90中的硬件加速圖像,非硬件加速圖像獲取模塊20產(chǎn) 生與繪制到幀緩沖器中的硬件加速圖像大小相同的更新區(qū),并將該更 新區(qū)添加到更新區(qū)列表55中。在當(dāng)前顯示的圖像是采用覆蓋(Overlay)方式的硬件加速圖像, 非硬件加速圖像獲取模塊20利用Overlay程序80,即Overlay更新 調(diào)用接口,獲取當(dāng)前Overlay在屏幕中的顯示位置,窗口尺寸以及顯 示模式等信息,然后在幀緩沖器50的相應(yīng)區(qū)域填充KeyColor (某一 眼睛不敏感的顏色值,如近似黑色,Overlay圖像可以透過該顏色顯 示)并產(chǎn)生相應(yīng)大小更新區(qū),添加到更新區(qū)列表55中;同時硬件加 速圖像獲取模塊10通過硬件加速調(diào)用接口實時獲取硬件加速圖像數(shù) 據(jù)。然后,更新區(qū)合并和數(shù)據(jù)獲取模塊30對更新區(qū)列表中的更新區(qū) 進(jìn)行合并,并從幀緩沖器50中抓取合并后的屏幕區(qū)域數(shù)據(jù),從而得 到所有的非硬件加速圖像數(shù)據(jù)。接下來,疊加模塊40將所獲得的硬件加速圖像和非硬件加速圖 像疊加在一起,在屏幕上顯示。下面結(jié)合一個具體的例子來說明在Overlay模式下本發(fā)明的方法 獲取屏幕圖像的過程。對于計算機(jī)屏幕上中同時顯示非硬件加速圖像和硬件加速圖像 的場景,例如,在因特網(wǎng)頁(1024*768)的左上角(0, 0)嵌入大小 為(480*320)的視頻窗口,該視頻窗口是通過Overlay顯示的。首先,加載非硬件加速圖像獲取模塊20,獲取所有網(wǎng)頁中的更新, 該更新為一個或多個矩形區(qū)域,并將更新(一個或多個矩形)添加到 更新區(qū)列表55中。如上所述,更新區(qū)列表55中僅僅顯示更新的一個 或多個矩形的位置和大小。然后,加載硬件加速圖像獲取模塊10,以攔截視頻窗口對圖形/ 圖像硬件加速接口的調(diào)用,復(fù)制視頻圖像數(shù)據(jù)并獲取視頻窗口 Overlay圖層在屏幕中的顯示位置矩形坐標(biāo)為(0, 0, 480, 320), 以及能夠透明顯示的KeyColor,如RGB (16, 0, 16),同時在網(wǎng)頁 的相應(yīng)區(qū)域(0, 0, 480, 320)填充該Key Color顏色。填充完畢后 產(chǎn)生大小為(0, 0, 480, 320)矩形,將其添加到更新區(qū)列表55。接下來,由更新區(qū)合并和數(shù)據(jù)獲取模塊30對更新區(qū)列表中的更 新去進(jìn)行合并,并從幀緩沖器50中抓取合并后網(wǎng)頁區(qū)域;最后由疊加模塊40將復(fù)制的視頻圖像和抓取的網(wǎng)頁圖像兩部分 數(shù)據(jù)直接疊加,即得到最終的結(jié)果——網(wǎng)頁左上角顯示視頻窗口。上面的描述僅用于實現(xiàn)本發(fā)明的實施方式,本領(lǐng)域的技術(shù)人員應(yīng) 該理解,在不脫離本發(fā)明的范圍的任何修改或局部替換,均應(yīng)該屬于 本發(fā)明的權(quán)利要求來限定的范圍,因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán) 利要求書的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種獲取計算機(jī)屏幕圖像的方法,包括步驟獲取非硬件加速圖像的更新區(qū),并將所獲得的更新區(qū)添加到更新區(qū)列表中;通過攔截圖形/圖像硬件加速接口的調(diào)用,來獲取硬件加速圖像;合并更新區(qū)列表中的更新區(qū),并從幀緩沖器中獲取合并后的更新區(qū)的圖像數(shù)據(jù)。
2. 如權(quán)利要求l所述的方法,其特征在于,還包括步驟 獲取硬件加速圖像的顯示信息;基于所述顯示信息,在幀緩沖器中產(chǎn)生相應(yīng)的更新區(qū);以及 將所產(chǎn)生的更新區(qū)添加到更新區(qū)列表中。
3. 如權(quán)利要求2所述的方法,其特征在于,所述顯示信息包括 尺寸,位置和顯示模式中的至少之一。
4. 如權(quán)利要求2所述的方法,其特征在于,所述在幀緩沖器中 產(chǎn)生相應(yīng)的更新區(qū)的步驟包括在幀緩沖器的相應(yīng)區(qū)域填充KeyCoIor,以產(chǎn)生相應(yīng)大小更新區(qū)。
5. 如權(quán)利要求l所述的方法,其特征在于,還包括步驟 產(chǎn)生與繪制到幀緩沖器的硬件加速圖像相對應(yīng)的更新區(qū);以及 將所產(chǎn)生的更新區(qū)添加到更新區(qū)列表中。
6. 如權(quán)利要求1所述的方法,其特征在于,所述圖形/圖像硬件 加速接口包括DirectX和/或OpenGL。
全文摘要
公開了一種獲取計算機(jī)屏幕圖像的方法,包括步驟獲取非硬件加速圖像的更新區(qū),并將所獲得的更新區(qū)添加到更新區(qū)列表中;通過攔截圖形/圖像硬件加速接口的調(diào)用,來獲取硬件加速圖像及位置信息等;合并更新區(qū)列表中的更新區(qū),并從幀緩沖器中獲取合并后的更新區(qū)的圖像數(shù)據(jù)。利用本發(fā)明的方法,可以同時快速地獲取硬件加速圖像和非硬件加速圖像。
文檔編號G06F3/14GK101154150SQ20061011340
公開日2008年4月2日 申請日期2006年9月27日 優(yōu)先權(quán)日2006年9月27日
發(fā)明者孫成昆, 彭紹平, 李洪偉, 蔣曉華, 顏毅強(qiáng) 申請人:聯(lián)想(北京)有限公司