MSAA

MSAA

MSAA是MultiSampling Anti-Aliasing的英文縮寫,指多重採樣抗鋸齒,原理是尋找出物體邊緣部分的像素,然後再把畫縮放到當前的顯示器上。

基本介紹

  • 中文名:多重採樣抗鋸齒
  • 簡稱:MSAA
  • 全稱:MultiSampling Anti-Aliasing
  • 作用:抗鋸齒
  • 原理:尋找出物體邊緣部分的像素縮放
原理,參,

原理

MSAA是“多重採樣抗鋸齒”,可以使畫面更加平滑。
超級採樣抗鋸齒(Super Sampling Anti-Aliasing)的原理是把當前解析度成倍提高,然後再把畫縮放到當前的顯示器上。這樣的做法實際上就是在顯示尺寸不變的情況提高解析度,讓單個像素變得極小,這樣就能夠大幅減輕畫面的鋸齒感了。不過是由於對整個顯示畫面的放大,因此它消耗的顯示資源也是非常大的。不過MSAA是尋找出物體邊緣部分的像素,然後對它們進行縮放處理。由於只是物體的外層像素進行縮放處理,忽略掉了不會產生鋸齒的內部像素,所以顯示卡不會像處理SSAA(超級採樣抗鋸齒)那樣需要龐大的計算量,因此MSAA比起SSAA來更有效。

Microsoft Active Accessibility
MSAA的全稱是Microsoft Active Accessibility。這是類似DCOM技術。技術模型是這樣的,UI程式可以暴露出一個Interface,方便另一個程式對其進行控制。 MSAA技術的初衷是為了方便殘疾人使用Windows 程式。比如盲人看不到視窗,但是盲人可以通過一個USB讀屏器連線到電腦上, 讀屏器通過UI程式暴露出來的這個Interface,就可以獲取程式信息,通過盲文或者其它形式傳遞給盲人。MSAA提供了如此方便的功能, UI自動化測試自然可以借用這項技術。MSAA暴露出來的Interface叫做 IAccessible。測試程式和目標UI程式互操作流程如下:
1. 測試程式調用Windows API: AccessibleObjectFromWindow,傳入目標UI程式HWND。
STDAPIAccessibleObjectFromWindow(HWNDhwnd,DWORDdwObjectID,REFIIDriid,void**ppvObject);//hwnd[入參]//類型:HWND//目標視窗句柄。若要檢索滑鼠指針或鍵盤插入點游標,在此指定nullptr並在dwObjectID中使用的相應的對象ID。//dwObjectID[入參]//類型:DWORD//指定對象的ID。此值是一個標準的對象標識符常量或一個自定義對象ID,如OBJID_NATIVEOM,這是Office本機對象模型的對象ID。有關OBJID_NATIVEOM的詳細信息,請參閱本主題中的備註部分。//riid[入參]//類型:REFIID//指定所請求的接口的引用標識符。此值是IID_IAccessible或IID_IDispatch,但它也可以是IID_IUnknown,或任何的IID接口,只要該對象支持的話。//ppvObject[出參]//類型:void**//返回值。
2. AccessibleObjectFromWindow函式向UI程式傳送WM_GETOBJECT訊息。
3. UI程式創建實現了IAccessible的內部類,然後通過LresultFromObject API把IAccessible 接口返回給測試程式
4. 測試程式拿到IAccessible接口,開始調用IAccessible接口函式操作測試目標。
IAccessible接口裡面的幾個關鍵函式是:
IAccessible::get_accChild/ IAccessible::get_accParent通過這兩個函式,調用者可以瀏覽目標程式的視窗關係樹,定位到UI元素
IAccessible::accLocation/I Accessible::accHitTest讀取和分辨目標元素的螢幕位置。
IAccessible::accName/ I Accessible:: accSelect讀取元素的名字,對UI元素進行指定的操作,比如選取Listbox裡面的某一項等等。
IAccessible::accValue 開發人員可以自定義value屬性的實現。比如針對摺線圖控制項,開發人員可以在accValue中返回折線的坐標數列。
MSAA的理念 類似於test hook。 通過主動讓UI程式暴露一個接口來讓調用者控制。 在具體使用中,測試人員往往是結合MSAA和Win32 API操作,取長補短。一方面對於UI元素豐富的屬性,比如style,鉤選狀態,是否最大化和模擬用戶輸入等,繼續採用Win32 API。 另一方面用MSAA的優勢來彌補Win32 API的一些不足,比如:
由於MSAA有自己的get_accChild方法,使其控制項樹關係並不一定要和Win32 HWNDd關係對應一致。對於自繪視窗,雖然說只有一個HWND, 但是開發人員可以通過實現IAccessible接口來實現邏輯上的層次關係。比如Excel中就可以通過IAccessible把多個cell的子 IAccessible接口暴露給調用者。
IAccessible的實現是由開發者提供, 開發者可以靈活地根據實際情況決定方法的實現。比如前面提到了折線圖控制項可以返回坐標數列。對於.NET WinForm, 微軟在Framework中就提供了IAccessible的默認實現,這樣在具體實現中,就可以處理.NET動態維護HWND的細節。

相關詞條

熱門詞條

聯絡我們