新四季網

一種圖形用戶界面的截取和重現方法

2023-05-04 14:48:36

專利名稱:一種圖形用戶界面的截取和重現方法
技術領域:
本發明涉及一種圖形用戶界面(Graphical User Interfaces,簡稱GUI)的截取和重現方法。
背景技術:
計算機繪圖分為繪製位圖和矢量圖兩大類。其中位圖是像素點的集合,以像素點的位置與顏色值表示;矢量圖,也稱為面向對象的圖像,則使用線段和曲線描述圖像,同時也包含了色彩和位置信息。兩種圖形表示方式各有優缺點,位圖的優點是色彩變化豐富,在編輯時可以改變位圖中的任意形狀的區域內的色彩顯示效果,相應的,要實現的效果越複雜,需要的像素點數越多,圖像文件的大小越大。矢量圖的優點是輪廓的形狀更容易修改和控制,但是對於單獨的對象,色彩變化的實現不如位圖方便直接。矢量圖可以很容易地轉化成位圖,但是位圖轉化為矢量圖卻比較困難,往往需要經過複雜的運算和手工調節。
目前,在個人和企業計算機應用領域,Windows(視窗)等基於圖形用戶界面的作業系統佔有了大部分的市場份額,甚至在以手機為代表的嵌入式產品領域,也出現了大量的基於圖形用戶界面的作業系統,如Symbian(塞班)等。我們稱這些基於圖形用戶界面的作業系統為圖形作業系統。在圖形作業系統中運行的應用程式,大多具有圖形用戶界面,用戶通過圖形用戶界面與程序進行交互。應用程式的圖形用戶界面可以包含多個窗口,每個窗口通常具有菜單,各種命令按鍵等控制項供用戶輸入操作指令。此外,窗口中通常還包含客戶區(顯示區),用於實時顯示程序當前運行狀態的信息,或由用戶繪圖或輸入文字信息。因此在圖形作業系統中,計算機繪圖通常是指對應用程式窗口的客戶區和非客戶區的繪製。
圖1是圖形作業系統中的應用程式運行環境結構示意圖。如圖1所示,應用程式的圖形用戶界面包含多個窗口,當應用程式的窗口需要重新繪製時(例如窗口客戶區的文字改變),應用程式向窗口管理單元發送重繪消息,通知窗口狀態的改變;窗口管理單元接收到重繪消息後調用窗口繪圖函數庫中的一系列繪圖函數,並將與繪圖相關的信息以參數形式傳遞給窗口繪圖函數庫的相關繪圖函數;每個被調用的繪圖函數根據傳入的參數執行對相應窗口的繪圖操作,改寫屏幕顯示存儲區中的與屏幕像素位置對應的像素點的顏色值(通常以RGB值表示一個像素點);作業系統(圖中略)根據屏幕顯示存儲區中的各像素點的顏色值繪製屏幕圖像。
目前,在需要對當前顯示在屏幕上的應用程式的圖形用戶界面進行截取操作時,通常採用截屏的方式,即通過作業系統提供的調用接口獲得整個屏幕的位圖數據(即屏幕各像素點的RGB值),並將位圖數據以文件形式存儲或傳輸。以截屏方式對圖形用戶界面進行截取存在如下問題1.數據量大,而且要求的清晰度越高,位圖包含的像素點就越多,需要的存儲空間也就越大;在進行遠程應用程式監控時,將消耗掉大量的網絡帶寬傳送對應的位圖數據;2.圖像處理較耗時,由於截屏得到的是整個屏幕的位圖數據,如果只需要某個或某幾個窗口的圖像還要進行裁減。在實時監控這種應用領域,通常要求響應迅速,尤其是在監控方屏幕上需要同時顯示多個被監控方的窗口時,截屏方式很難滿足監控的實時性要求;3.位圖在進行縮放變換後會失真,不方便處理。
由於圖形用戶界面的形狀比較規整,比較適合用矢量圖表示,因此現有一些圖形軟體將截屏得到的位圖,經過複雜的圖形分析轉換為矢量圖,再將矢量圖進行保存或傳輸,這樣做雖然能夠減少存儲空間和網絡傳輸帶寬,但加重了運算負荷,處理效率較低。

發明內容
本發明所要解決的技術問題是克服現有技術中圖形用戶界面的截取方法的不足,提出一種數據量小,便於存儲、傳輸,且處理速度快的圖形用戶界面的截取方法及相應的圖形重現方法。
為了解決上述問題,本發明提供一種圖形用戶界面的截取方法,其特徵在於,使用該圖形用戶界面的目標窗口的窗口圖形屬性信息以及對該目標窗口進行重繪所需的繪圖函數的名稱和相應的繪圖動作數據,生成表示該圖形用戶界面的目標窗口圖形的複合圖形數據;所述窗口圖形屬性信息包含窗口大小和窗口屬性;所述繪圖動作數據是繪圖函數的參數所標識的、用於完成該繪圖函數對應的繪圖操作的數據。
此外,該方法包含如下步驟A)向用於對圖形用戶界面的窗口進行繪圖的繪圖函數注入繪圖函數攔截器,使得繪圖函數將被調用時,相應的繪圖函數攔截器代替其被調用;B)獲取目標窗口的窗口標識信息;C)使用該窗口標識信息啟動對目標窗口的截圖操作;獲取該目標窗口的窗口圖形屬性信息,將其記錄在對應的複合圖形數據存儲區中,並向目標窗口發送針對窗口全部區域的重繪消息;當繪圖函數攔截器被調用時,執行以下步驟D)獲取調用窗口標識信息,並根據該窗口標識信息判斷對應窗口是否處於截圖操作狀態如果是,則執行步驟E);否則,執行步驟F);E)將對應的繪圖函數的名稱、繪圖函數參數對應的繪圖動作數據記錄在該調用窗口標識信息對應的複合圖形數據存儲區中;F)調用對應的繪圖函數。
此外,所述步驟C)中的啟動對目標窗口的截圖操作的過程包含以下子步驟C1)將所述目標窗口對應的操作狀態位設置為啟動狀態;C2)啟動所述目標窗口對應的長度為T的定時器;
所述步驟C)之後包含如下步驟G)當所述目標窗口對應的定時器超時時,將所述目標窗口對應的操作狀態位設置為停止狀態,結束對所述目標窗口的截圖操作;其中T大於或等於完成一次窗口重繪操作所需的時間。
此外,所述步驟G)之後還包含如下步驟存儲或傳輸或處理所述複合圖形數據存儲區中保存的包含窗口圖形屬性信息和繪圖函數名稱、繪圖函數參數對應的繪圖動作數據的複合圖形數據。
此外,所述步驟D)中根據窗口標識信息判斷對應窗口是否處於截圖操作狀態的過程包含如下子步驟D1)若該窗口標識信息對應的操作狀態位為啟動狀態,則判斷結果為是;D2)若該窗口標識信息對應的操作狀態位為停止狀態,則判斷結果為否;D3)若未找到與該窗口標識信息對應的操作狀態信息,則判斷結果為否。
此外,在所述步驟A)中,採用鉤子函數的方法,將鉤子函數作為繪圖函數攔截器實現注入所述繪圖函數。
此外,所述圖形用戶界面的開發/運行環境為JAVA,所述步驟A)包含如下子步驟A1)創建擴展圖形環境,並通過設置所述目標窗口所屬的目標程序的啟動參數,將該目標程序的圖形環境設置為該擴展圖形環境;A2)創建與該擴展圖形環境相關聯的擴展圖形設備;創建與該擴展圖形設備相關聯的擴展圖形配置信息對象;
A3)在該擴展圖形配置信息對象中創建擴展空白圖像,並重寫該擴展空白圖像的createGraphics方法,使該方法返回包含作為繪圖函數攔截器的繪圖方法的擴展繪圖對象,完成繪圖函數攔截器的注入;其中,上述擴展繪圖對象為繪圖對象的子類。
此外,在所述擴展繪圖對象的dispose方法被調用時停止對所述目標窗口的截圖操作。
此外,所述窗口圖形屬性信息還包含窗口的標題信息、窗口的圖標資源信息、窗口的菜單資源信息。
本發明還提供一種圖形用戶界面的重現方法,其特徵在於,該方法對包含窗口圖形屬性信息以及繪圖函數名稱和相應的繪圖動作數據的複合圖形數據進行如下操作H)根據所述窗口圖形屬性信息創建相同或相應類型的窗口以及相應的繪圖函數庫;記錄該窗口的窗口標識信息;I)根據所述複合圖形數據中包含的各繪圖函數名稱和相應的繪圖動作數據以及上述窗口標識信息,生成相應的繪圖函數所需的參數,並使用該參數調用所述繪圖函數庫中相應的繪圖函數,對該窗口進行繪圖操作;所述窗口圖形屬性信息包含窗口大小和窗口屬性;所述繪圖動作數據是用於完成對應的繪圖函數所執行的繪圖操作的數據。
本發明通過在窗口繪圖函數庫中注入繪圖函數攔截器,並通過攔截並記錄窗口的繪圖動作生成圖形用戶界面的矢量圖或包含矢量圖和位圖數據的複合圖形數據。按照本發明的方法生成的圖形用戶界面的圖形數據數據量小,便於存儲和傳輸,處理速度較快。


圖1是圖形作業系統中的應用程式運行環境結構示意圖;圖2是本發明第一實施例圖形用戶界面的截取方法流程圖;圖3是注入繪圖函數攔截器前後的函數調用關係示意圖;圖4是本發明第一實施例圖形用戶界面的重現方法流程圖;圖5為JAVA開發/運行環境的結構示意圖;圖6是本發明第二實施例採用繪圖對象替換方式注入繪圖函數攔截器的方法流程圖。
具體實施例方式
由於圖形用戶界面的圖形通常由圖標和非圖標控制項組合而成。其中,圖標通常形狀不規則,色彩變化大,適合用位圖表示;非圖標控制項的形狀規則,色彩變化不大,適合用矢量圖表示,因此可以採用包含位圖和矢量圖數據的複合圖形數據來保存圖形用戶界面的圖形信息;而上述複合圖形數據可以在對圖形用戶界面進行繪圖操作的繪圖函數被調用時,通過記錄繪圖函數的名稱和對應的繪圖動作數據的方式生成。
下面將結合附圖和實施例,對本發明進行詳細說明。
圖2是本發明第一實施例圖形用戶界面的截取方法流程圖。如圖2所示,圖形用戶界面的截取(即窗口截圖)方法包含如下步驟101向窗口繪圖函數庫的所有繪圖函數注入繪圖函數攔截器,使得繪圖函數庫的繪圖函數將被調用時,相應的繪圖函數攔截器代替其被調用。
由圖1可知,當需要進行窗口重繪時,應用程式向窗口管理單元發送重繪消息,窗口管理單元接收到該消息後調用窗口繪圖函數庫中的繪製該窗口所需的一系列繪圖函數,因此可以將繪圖函數攔截器注入窗口繪圖函數庫的各繪圖函數中。繪圖函數攔截器可以獲得被調用的繪圖函數的名稱、參數等信息。
圖3是注入繪圖函數攔截器前後的函數調用關係示意圖。圖中的實線表示在注入繪圖函數攔截器前,窗口管理單元中的調用函數對窗口繪圖函數庫中的繪圖函數進行調用時的函數調用關係;虛線表示注入攔截器後調用函數對繪圖函數進行調用時的函數調用關係。
在本實施例中使用鉤子函數作為繪圖函數攔截器。對於運行在Windows等作業系統的應用程式,注入繪圖函數攔截器可採用鉤子函數的方法。鉤子函數是Windows系統中非常重要的系統接口,用於攔截並處理應用程式的函數調用或消息處理過程。例如,繪圖函數的名稱為DrawLine,若需要攔截對該函數的調用,可以定義一個鉤子函數MyHook;安裝該鉤子函數後,每當DrawLine函數被調用時,程序將自動轉至MyHook函數執行。因此,採用這種方法時,鉤子函數MyHook就是繪圖函數攔截器。關於鉤子函數的具體使用方法請參閱相關開發文檔。
102獲取目標窗口的窗口標識信息;目標窗口就是需要對其進行截圖操作的窗口,該窗口所屬的應用程式稱為目標應用程式。
由於應用程式的圖形用戶界面可能包含多個窗口,可以對其中的一個或多個窗口進行截圖操作,因此需要獲取進行截圖操作的目標窗口的窗口標識信息。窗口標識信息在Windows開發/運行平臺中被稱作窗口句柄,而在JAVA開發/運行平臺中被稱作窗口/頂層容器引用。
窗口標識信息可通過調用開發/運行平臺提供的API(ApplicationProgramming Interface,應用程式開發接口)函數獲得;不同的開發/運行平臺提供的AP I不同。例如,在Windows平臺中,可調用FindWindow等函數獲得目標窗口句柄。
103創建目標窗口的複合圖形數據存儲區,記錄該存儲區的標識信息;上述存儲區的標識信息用於獲取複合圖形數據存儲區當前的存儲位置。上述存儲區可以是內存中的一塊連續的存儲空間,其標識信息為該存儲空間的起始地址+當前偏移地址;一個文件,其標識信息為該文件名稱或文件句柄;一個鍊表對象,其標識信息為該鍊表對象的鍊表頭地址或鍊表句柄。
104啟動對目標窗口的截圖操作;
啟動截圖操作就是使繪圖函數攔截器在被調用時(由繪圖函數被調用所引發)可以獲知當前目標窗口正處於截圖操作狀態。
啟動截圖操作包含如下子步驟104a設置目標窗口對應的操作狀態位,例如,創建如表1所示的窗口狀態表,將目標窗口的窗口標識信息(窗口句柄)對應的操作狀態值設置為1(啟動狀態);104b啟動目標窗口對應的截圖操作定時器,即啟動表1中目標窗口的窗口標識信息對應的定時器;可將對應的窗口標識信息作為參數傳遞給定時器,使其超時被觸發時可以確定定時器所屬的窗口。

表1表1中的窗口句柄1、窗口句柄2為應用程式的2個窗口的窗口標識信息;操作狀態值為1表示正在對相應窗口進行截圖操作,值為0(停止狀態)表示沒有進行截圖操作;存儲地址1、存儲地址2為複合圖形數據存儲區的當前存儲位置。如果以文件方式保存複合圖形數據,存儲區標識信息可以是文件名或文件句柄。
105使用窗口標識信息獲取目標窗口的窗口圖形屬性信息,生成複合圖形數據的窗口圖形屬性部分,記錄在對應的複合圖形數據存儲區中,並向目標窗口發送窗口全部區域的重繪消息;在目標窗口接收到上述重繪消息後,窗口的消息處理函數會將該消息發送至窗口管理單元,同時將窗口標識信息傳遞給窗口管理單元;窗口管理單元使用窗口標識信息調用窗口繪圖函數庫中的相應繪圖函數開始對目標窗口的全部區域進行重繪,從而觸發對應的繪圖函數攔截器運行。
上述複合圖形數據包含兩部分窗口圖形屬性和窗口圖形主體。
窗口圖形屬性部分以類型/長度/內容的形式依次記錄窗口圖形屬性信息。窗口圖形主體部分包含多個窗口圖形主體項,每個窗口圖形主體項用於記錄繪圖函數的名稱及對應的繪圖動作數據。
上述窗口圖形屬性信息包含窗口的大小、窗口的標題信息、窗口的類型、窗口的圖標資源信息、窗口的菜單資源信息等。對於Windows開發/運行平臺上的應用程式,窗口的類型可以是單文檔、多文檔、對話框等;對於JAVA開發/運行平臺上的應用程式,窗口類型可以是JFrame、JWindow、Jdialog等。其中,窗口的圖標資源信息為窗口圖標的位圖數據。
窗口圖形屬性信息可通過調用開發/運行平臺提供的API函數獲得。例如在Windows平臺,可以使用GetWindowText函數獲得窗口的標題信息;使用GetWindowRect獲得窗口的大小。
在生成複合圖形數據的窗口圖形屬性部分時,除窗口的大小、窗口的類型外,其它都可以省略。
根據窗口圖形屬性信息生成複合圖形數據的窗口圖形屬性部分時,通常需要進行數據轉換,例如根據獲得的目標窗口的圖標的位圖對象指針/引用獲取對應的位圖數據,並將該位圖數據壓縮成JPEG(Joint PhotographicExperts Group,聯合圖像專家組)格式的數據進行存儲。
將複合圖形數據保存在複合圖形數據存儲區後可能需要修改相應的存儲區標識信息,例如,若以內存中的一塊連續的存儲空間來存儲複合圖形數據,則在數據寫入後需要修改當前的偏移地址,使得後續數據寫入正確的位置。若以文件方式存儲複合圖形數據,則無需進行存儲區標識信息的調整。
當繪圖函數攔截器被調用時執行以下步驟106~108106被調用的繪圖函數攔截器獲取引發相應的繪圖函數調用的窗口的窗口標識信息(簡稱調用窗口標識信息),並根據該窗口標識信息從表1中查詢該窗口當前是否處於截圖狀態
如果是,則執行步驟107;否則,執行步驟108。
查詢當前是否處於截圖狀態就是繪圖函數攔截器根據窗口標識信息從表1中查詢對應的操作狀態值;若對應操作狀態值為1表示正處於截圖狀態;若值為0或不存在對應的窗口標識信息則表示該窗口沒有處於截圖狀態。
窗口標識信息可以是窗口管理單元以參數的方式傳遞給繪圖函數,因此繪圖函數攔截器可以直接通過讀取該參數獲得;或者可以通過繪圖函數攔截器提取調用函數的指針,獲取對應的調用函數所述的類/對象信息(例如類名稱,該類所屬的父類等),通過該類/對象信息獲得調用窗口的句柄/引用等窗口標識信息。
107繪圖函數攔截器根據窗口標識信息獲取對應的存儲區標識信息,並將被調用的繪圖函數的名稱及其參數所對應的繪圖動作數據作為複合圖形數據的窗口圖形主體項記錄在存儲區標識信息所指示的複合圖形數據存儲區中;上述繪圖動作數據是繪圖函數的參數所標識的、與目標程序上下文(Context)無關的、實際用於完成該繪圖函數對應的繪圖操作的數據。繪圖函數所使用的參數有時是指向某一內存區域的指針、或某一對象的句柄/引用;而上述指針、句柄、引用等信息在脫離了當前的程序運行上下文後即失去了意義,無法被重新使用。因此,需要記錄該參數所標識的用於實際繪圖動作的繪圖動作數據。例如,位圖函數的參數包含指向一個位圖對象的指針,需要將其轉換為該指針所指向的實際用於繪製位圖的位圖數據(繪圖動作數據)。當然,對於某些繪圖函數,其部分或全部參數與繪圖動作數據相同。
繪圖函數可分為兩大類位圖函數,矢量函數。位圖函數的參數所對應的繪圖動作數據為對應繪製區域中的每個像素點的RGB值;矢量函數的參數所對應的繪圖動作數據為相應的繪圖動作所需的特徵參數。通常情況下,位圖函數的參數所對應的繪圖動作數據比矢量函數的參數所對應的繪圖動作數據的數據量大得多。以一根直線圖形為例,如果以位圖方式表示,則位圖函數的參數所對應的繪圖動作數據為該直線所有的像素點的RGB值(或灰度值);若以矢量圖表示,矢量函數的參數所對應的繪圖動作數據則是該直線的兩個端點的位置信息。
108繪圖函數攔截器根據所攔截的繪圖函數的名稱及其參數調用相應的繪圖函數。
109若上述定時器超時,則將表1中與目標窗口對應的操作狀態值設置為0,結束對該目標窗口的截圖操作;定時器的長度應大於或等於對目標窗口進行一次重繪操作所需的時間,其值由系統性能和圖形的複雜程度決定。
110存儲或傳輸所生成的目標窗口對應的複合圖形數據。
圖4是本發明第一實施例圖形用戶界面的重現(即窗口重現)方法流程圖。圖形用戶界面的重現就是根據上述複合圖形數據中包含的信息,重新繪製對應的圖形用戶界面(窗口)。如圖4所示,圖形用戶界面的重現包含如下步驟201讀取複合圖形數據中的窗口圖形屬性部分,根據其中包含的窗口圖形屬性信息調用相應的API函數,創建相同或相應類型的窗口以及相應的繪圖函數庫;記錄所創建窗口的窗口標識信息(例如,窗口句柄);202讀取複合圖形數據中的各窗口圖形主體項,根據其中包含的函數名稱及其繪圖動作數據以及上述窗口標識信息,依次生成相應的繪圖函數所需的參數,並使用該參數調用該繪圖函數,對該窗口進行繪圖操作;在對繪圖函數進行調用前,需要將複合圖形數據中記錄的繪圖動作數據轉換成對應的繪圖函數庫中的繪圖函數參數。例如,複合圖形數據中記錄的位圖函數的繪圖動作數據包含JPEG壓縮格式的圖像數據,需要將其轉換成BMP格式的位圖數據,並生成包含該位圖數據的位圖對象,將該位圖對象的指針/引用作為參數傳遞給相應的位圖函數。
此外,圖形用戶界面的重現通常需要與截取處於相同的開發/運行環境中。也就是說,對在某一開發/運行環境中運行的應用程式的圖形用戶界面的複合圖形數據,需要在同樣的開發/運行環境中對其重現。例如,對Windows應用程式的圖形用戶界面進行截取所生成的複合圖形數據,若要對其進行重現,同樣需要依賴Windows開發/運行環境。產生這種局限性主要有以下原因一、每一種開發/運行環境中的圖形用戶界面具有不同的屬性,若放入另一環境中,則很難使用複合圖形數據中包含的窗口圖形屬性信息創建外觀完全相同的窗口;二、不同的開發/運行環境中的窗口繪圖函數庫包含的繪圖函數名稱和所需參數可能不同。
當然可以通過對複合圖形數據進行轉換來解決或部分解決上述問題,例如,在不同的開發/運行環境中重現複合圖形數據對應的窗口時,雖然不能創建類型/外觀完全相同的窗口,但可以創建類型/外觀相似的窗口;此外,還可以對繪圖函數名稱和繪圖動作數據進行轉換以適應新的開發/運行環境。
下面將通過第二實施例對本發明作進一步描述。此實施例對應對JAVA(爪窪)平臺中使用SWING(搖擺)開發工具所開發的應用程式的圖形用戶界面進行截取。
圖5為JAVA開發/運行環境的結構示意圖。如圖5所示,在JAVA平臺中開發/運行的應用程式(簡稱JAVA程序)的圖形用戶界面都是通過Graphics2D函數庫繪製到終端設備(通常就是顯示器屏幕)。其中,SWING是在JAVA平臺中普遍採用的圖形界面開發工具包,其中包含了對圖形用戶界面進行管理的窗口管理單元。JAVA2D圖形庫中包含Graphics2D窗口繪圖函數庫。
在此實施例中,對圖形用戶界面進行截取和重現的步驟與上一實施例基本相同,只是採用了替換Graphics2D繪圖對象的方式實現注入繪圖函數攔截器。由於JAVA程序的開發基於面向對象技術,因此JAVA程序中的窗口(稱為頂層容器)、窗口對應的窗口管理單元、以及Graphics2D窗口繪圖函數庫都是以對象(Object)/類(Class)的形式存在。而Graphics2D窗口繪圖函數庫中的所有繪圖函數都以Graphics2D繪圖對象的方法的形式存在。
在默認情況下,系統會為JAVA應用程式的每一個頂層容器配置一個Graphics2D繪圖對象(稱為系統繪圖對象),由該繪圖對象對頂層容器進行繪製操作。也就是說,在為應用程式創建一個新的頂層容器並使其顯示在屏幕上時,或者頂層容器中的某個或整個區域需要重新繪製時,將會調用與該頂層容器對應的Graphics2D繪圖對象的相應方法(即繪圖函數)。因此只要能夠將目標頂層容器的系統繪圖對象替換成自定義的擴展繪圖對象,即可攔截該頂層容器的所有繪圖函數調用。
圖6是本發明第二實施例採用繪圖對象替換方式注入繪圖函數攔截器的方法流程圖。如圖6所示,注入繪圖函數攔截器包含如下步驟301通過繼承圖形環境類(GraphicsEnvironment)的方式創建擴展圖形環境(記作ExtGe);JAVA中的圖形環境用於定義一個不同操作平臺上JAVA程序可見的著色設備(Rendering Devices)的集合。著色設備包括顯示器、印表機和圖像緩衝器。
302設置JAVA程序啟動參數,將JAVA應用程式的圖形環境設置為上述擴展圖形環境ExtGe;例如,在目標應用程式的啟動配置文件中寫入以下命令,將ExtGe設置為該應用程式的圖形環境set_JAVA_OPTIONS -Djava.awt.graphicsenv ExtGe303在擴展設備環境中創建擴展圖形設備(GraphicsDevice);將顯示器作為當前指定的著色設備,該擴展圖形設備與該擴展設備環境相關聯。
304在上述擴展圖形設備中創建擴展圖形配置信息對象(GraphicsConfiguration),該擴展圖形配置信息對象與該擴展圖形設備相關聯。
305在擴展圖形配置信息對象中創建擴展空白圖像ExtImage。
306重寫上述擴展空白圖像ExtImage的createGraphics方法,使該方法返回的繪圖對象為擴展繪圖對象(記作ExtGraphics2D);其中擴展繪圖對象ExtGraphics2D為繪圖對象Graphics2D的子類;擴展繪圖對象的各繪圖方法(繪圖函數)就是被注入的繪圖函數攔截器。
經過上述步驟301至306,當目標應用程式的頂層容器需要進行繪圖動作時,將會調用擴展繪圖對象(ExtGraphics2D)中的對應繪圖方法/函數。因此只需將擴展繪圖對象中的每個繪圖函數(即繪圖對象的方法)進行重寫,使其作為繪圖函數攔截器攔截相應的繪圖函數調用,並執行上述步驟107中的操作;並在步驟108中,通過調用其父類(Graphics2D)的同名繪圖函數,執行相應的繪圖操作。
此外,由於上述擴展繪圖對象在一段時間內沒有使用時(例如,其對應的頂層容器一段時間內沒有重繪動作),系統將刪除該擴展繪圖對象;當需要對頂層容器進行重繪時,系統又將重新創建該擴展繪圖對象。因此,可以在該擴展繪圖對象的dispose方法中將表1中與目標窗口對應的操作狀態值設置為0,結束對該目標窗口的截圖操作。
下面將對Graphics2D繪圖函數庫中的繪圖函數及其參數,以及參數對應的繪圖動作數據進行分類描述。Graphics2D繪圖函數庫中的繪圖函數包含以下幾類1.位圖函數用於繪製位圖,如drawImage函數;其參數包括位圖對象的引用以及位圖所處區域的坐標值;因此繪圖動作數據包括該引用所指向的位圖數據以及位圖所處區域的坐標值;2.矢量函數,包括位置描述函數、屬性設置函數、文本繪製函數、形狀繪製函數、形狀填充函數等。其中1)位置描述函數,用於指定控制項位置或控制項有效區域,如translate函數;其參數為整數值,表示坐標值;繪圖動作數據與參數相同;2)屬性設置函數,用於設置圖形屬性,如setColor函數,其參數為顏色對象的引用;繪圖動作數據為該顏色對象引用所指向的顏色值(RGB值);3)文本繪製函數,用於繪製文本,如drawString函數,其參數為字符串對象的引用;繪圖動作數據為該引用所指向的字符串值;4)形狀繪製函數,用於繪製直線、折線、矩形、圓形等封閉或開放圖形,如drawRect,其參數為矩形左上角坐標和矩形寬度、矩形高度值,繪圖動作數據與參數相同;5)形狀填充函數,用於使用特定顏色填充封閉圖形,其參數和繪圖動作數據與形狀繪製函數相似。
將上述繪圖函數名稱與對應的繪圖動作數據作為複合圖形數據的窗口圖形主體項依次保存在複合圖形數據存儲區中,與窗口圖形屬性部分一起構成包含位圖數據和矢量圖數據的複合圖形數據。
基於本發明原理,在上述實施例的基礎上還可以做各種變換。例如,對於不使用窗口管理單元,而採用直接調用窗口繪圖函數庫中的繪圖函數繪製窗口的應用程式,可以在其調用繪圖函數的同時,將繪圖函數的名稱和相應的繪圖動作數據寫入存儲區,連同該窗口的窗口圖形屬性信息生成複合圖形數據,達到對該應用程式的圖形用戶界面進行截取的目的。
權利要求
1.一種圖形用戶界面的截取方法,其特徵在於,使用該圖形用戶界面的目標窗口的窗口圖形屬性信息以及對該目標窗口進行重繪所需的繪圖函數的名稱和相應的繪圖動作數據,生成表示該圖形用戶界面的目標窗口圖形的複合圖形數據;所述窗口圖形屬性信息包含窗口大小和窗口屬性;所述繪圖動作數據是繪圖函數的參數所標識的、用於完成該繪圖函數對應的繪圖操作的數據。
2.如權利要求1所述的圖形用戶界面的截取方法,其特徵在於,該方法包含如下步驟A)向用於對圖形用戶界面的窗口進行繪圖的繪圖函數注入繪圖函數攔截器,使得繪圖函數將被調用時,相應的繪圖函數攔截器代替其被調用;B)獲取目標窗口的窗口標識信息;C)使用該窗口標識信息啟動對目標窗口的截圖操作;獲取該目標窗口的窗口圖形屬性信息,將其記錄在對應的複合圖形數據存儲區中,並向目標窗口發送針對窗口全部區域的重繪消息;當繪圖函數攔截器被調用時,執行以下步驟D)獲取調用窗口標識信息,並根據該窗口標識信息判斷對應窗口是否處於截圖操作狀態如果是,則執行步驟E);否則,執行步驟F);E)將對應的繪圖函數的名稱、繪圖函數參數對應的繪圖動作數據記錄在該調用窗口標識信息對應的複合圖形數據存儲區中;F)調用對應的繪圖函數。
3.如權利要求2所述的圖形用戶界面的截取方法,其特徵在於,所述步驟C)中的啟動對目標窗口的截圖操作的過程包含以下子步驟C1)將所述目標窗口對應的操作狀態位設置為啟動狀態;C2)啟動所述目標窗口對應的長度為T的定時器;所述步驟C)之後包含如下步驟G)當所述目標窗口對應的定時器超時時,將所述目標窗口對應的操作狀態位設置為停止狀態,結束對所述目標窗口的截圖操作;其中T大於或等於完成一次窗口重繪操作所需的時間。
4.如權利要求3所述的圖形用戶界面的截取方法,其特徵在於,所述步驟G)之後還包含如下步驟存儲或傳輸或處理所述複合圖形數據存儲區中保存的包含窗口圖形屬性信息和繪圖函數名稱、繪圖函數參數對應的繪圖動作數據的複合圖形數據。
5.如權利要求3所述的圖形用戶界面的截取方法,其特徵在於,所述步驟D)中根據窗口標識信息判斷對應窗口是否處於截圖操作狀態的過程包含如下子步驟D1)若該窗口標識信息對應的操作狀態位為啟動狀態,則判斷結果為是;D2)若該窗口標識信息對應的操作狀態位為停止狀態,則判斷結果為否;D3)若未找到與該窗口標識信息對應的操作狀態信息,則判斷結果為否。
6.如權利要求2所述的圖形用戶界面的截取方法,其特徵在於,在所述步驟A)中,採用鉤子函數的方法,將鉤子函數作為繪圖函數攔截器實現注入所述繪圖函數。
7.如權利要求2所述的圖形用戶界面的截取方法,其特徵在於,所述圖形用戶界面的開發/運行環境為JAVA,所述步驟A)包含如下子步驟A1)創建擴展圖形環境,並通過設置所述目標窗口所屬的目標程序的啟動參數,將該目標程序的圖形環境設置為該擴展圖形環境;A2)創建與該擴展圖形環境相關聯的擴展圖形設備;創建與該擴展圖形設備相關聯的擴展圖形配置信息對象;A3)在該擴展圖形配置信息對象中創建擴展空白圖像,並重寫該擴展空白圖像的createGraphics方法,使該方法返回包含作為繪圖函數攔截器的繪圖方法的擴展繪圖對象,完成繪圖函數攔截器的注入;其中,上述擴展繪圖對象為繪圖對象的子類。
8.如權利要求7所述的圖形用戶界面的截取方法,其特徵在於,在所述擴展繪圖對象的dispose方法被調用時停止對所述目標窗口的截圖操作。
9.如權利要求1所述的圖形用戶界面的截取方法,其特徵在於,所述窗口圖形屬性信息還包含窗口的標題信息、窗口的圖標資源信息、窗口的菜單資源信息。
10.一種圖形用戶界面的重現方法,其特徵在於,該方法對包含窗口圖形屬性信息以及繪圖函數名稱和相應的繪圖動作數據的複合圖形數據進行如下操作H)根據所述窗口圖形屬性信息創建相同或相應類型的窗口以及相應的繪圖函數庫;記錄該窗口的窗口標識信息;I)根據所述複合圖形數據中包含的各繪圖函數名稱和相應的繪圖動作數據以及上述窗口標識信息,生成相應的繪圖函數所需的參數,並使用該參數調用所述繪圖函數庫中相應的繪圖函數,對該窗口進行繪圖操作;所述窗口圖形屬性信息包含窗口大小和窗口屬性;所述繪圖動作數據是用於完成對應的繪圖函數所執行的繪圖操作的數據。
全文摘要
一種圖形用戶界面的截取方法,其特徵在於,使用該圖形用戶界面的目標窗口的窗口圖形屬性信息以及對該目標窗口進行重繪所需的繪圖函數的名稱和相應的繪圖動作數據,生成表示該圖形用戶界面的目標窗口圖形的複合圖形數據;所述窗口圖形屬性信息包含窗口大小和窗口屬性;所述繪圖動作數據是繪圖函數的參數所標識的、用於完成該繪圖函數對應的繪圖操作的數據。本發明通過在窗口繪圖函數庫中注入繪圖函數攔截器,並通過攔截並記錄窗口的繪圖動作生成圖形用戶界面的矢量圖或包含矢量圖和位圖數據的複合圖形數據。按照本發明的方法生成的圖形用戶界面的圖形數據數據量小,便於存儲和傳輸,處理速度較快。
文檔編號G06F9/44GK101071380SQ20071012312
公開日2007年11月14日 申請日期2007年6月27日 優先權日2007年6月27日
發明者胡良俊, 鄭平, 魏國強 申請人:中興通訊股份有限公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀