以下文章來源
blog.xi-ji.com
" J( K k8 A0 a5 `" V" p( M6 B$ r2 D2 M& H
針對上次開發的測試程式作了許多的修正首先是將處理電容觸控訊號的部份把它物件化, 因為程式是使用WPF+VB下開發的, 所以物件化的好處就是容易除錯跟修改, 還有可以提升一些效能. 另外則增加了以下幾個功能1. JitterFix - 針對電容訊號抖動的部份進行過濾跟修正, 以便增加判定的穩定性2. AutoTune - 是將電容訊號的變化做 Smooth 的處理, 讓瞬時間的雜訊可以被抑制3. AutoSnap - 自動回覆功能, 當電容訊號處在長時間存在的雜訊干擾自動做消除的功能
1 G& U2 q2 i' ^- @. N% D2 I) j8 M& p
4. WaveVector - 主要是加入波形向量化資訊, 方便取得方波波型的變化量, 並且透過變化量轉換為狀態時, 自動將方波作平整化
- J7 G2 [( a+ t' j6 E1 f: C. I; ^
8 k1 _" U1 d, `7 W$ h0 b( C! x1 [由於目前所使用的投射式觸控模產生的資訊為 256*32 的方波波型, 因此特別針對此波型作特殊處理, 但是VB速度有限, 所以會有資料遺失的狀況產生, 至於為什麼不用C開發呢, 當然是為了觀看結果方便, 如過使用C開發會花很多時間在如何把結果呈現在畫面上, 故採用WPF為基礎, 這樣對於畫面的呈現完全交給WPF處理而不需要直接叫用Windows GDI的API, 可以節省很多時間, 當然未來測試完成後, 因為目前已改成使用物件寫法, 可以輕易的將處理資料的Parser輕鬆的轉換為C
& n$ M# u5 h& A) N: s4 x, s
0 @1 w: k& @6 t; Z% n
下一版本會將物件重新再改寫一次, 因為這次開發中使用了陣列, 並且利用回圈去處理陣列資訊, 導致太多回圈時間, 托慢資料Parse速度, 下一版的物件會把部分陣列轉換成集合物件, 這樣對於很多排序或運算的工作可以交回去給原本WPF內的物件去做, 可以提升速度, 其次就是要把這次開發的功能重新做最佳化的動作, 預計該版完成後, 便可以進行下一階段, 將各點資訊取出, 並且透過定位換算成座標, 最後加入手勢判別, 不過可能考慮手勢判別在前期就做整合, 因為很多手勢其實不需要利用定位後的座標來操作, 因此在沒有定位座標的換算下, 相對處理速度會比換算成螢幕的實際座標來的快, 所以考慮先把一些簡單的手勢做整合, 不過一切都要等測試過下一版本的速度之後才能確認啦~呵呵
+ o6 N$ Y9 B( `: D$ e: q# D. v* ]& ]: e" H4 t, ~( {' U# Y
補充說明, 這次程式本來有採用 .Net 的 BackgroundWorker 這個物件去做多執行緒的處理, 結果發現, WPF 的 UI 處理速度還蠻慢的, 一但使用多執行緒的處理, 導致接收資料的 Thread 一進來就交給 Parser 的 Thread 去處理, 然後繼續接收資料, Parser 則是一處理完就去叫 UI 的 Thread 來處理, 結果導致, 接收資料的 Thread 會去一直收資料進來, Parser 處理完就一直丟資料給 UI, 結果整個 UI 就拖垮了, 完全 Hang 在那邊不會更新了, 後來只好改回用接收 Thread 的資料去把資料 Parse 完以後再去丟給 UI 的 Thread 處理, 因為接收資料的 Thread 要等處理完 Parser 以後才會繼續去收新資料, 所以 Buffer 自然都是滿到爆, 因此這程式沒有辦法執行太久的時間, 下次會想辦法在裡面加入 DTR 訊號控制直接讓硬體不要在送資料來了, 不然程式跑一個小時以後就爆了
2 ~- O: N: m5 g3 d- @4 V
# [1 j: k0 `4 H) P' `線上影片
& ^: n. n0 y. ^8 ?" x% V( C
3 ^& z: p% c, ~' E a' u高解析度影片下載 (速度較慢)0 u) d1 B6 S, O& B9 A7 _
/ X$ m- K6 J1 O# q, c9 r
[
本帖最后由 stevehsu 于 2008-6-4 00:42 编辑 ]