基于MiniGUI的觸摸屏多點采集校準算法
向昱丞1,高潔2
(1.中國兵器工業第58研究所軍電部,四J|I綿陽621000;2.中國兵器工業第58研究所軍品部,四川綿陽621000)
摘要:為實現觸摸屏的精確校準,提出一種在嵌入式Linux系統下基于MiniGUl的觸摸屏多點采集校準算法.該方法利用MiniGUI定時器消息和鼠標消息,在一般校屏程序中只需采集5個基本目標點,將每個目標點的取值都細化為多個光標點運算處理。通過多點數據的采集、比較及處理,能夠較精確地校準觸摸屏。結果表明,該算法能提高取值的準確性,減少取值過程中的誤操作。
關鍵詞:嵌入式Linux系統;MiniGUI;觸摸屏多點采集
中圖分類號:TP301.6;TP311.52 文獻標志碼:A
O 引言
觸摸屏處理的數據是點的物理坐標,通過觸摸屏控制器采集得來,而LCD顯示屏則處理像素。同時,在安裝觸摸屏的過程中,也存在一定的誤差,所以需要校準。
嵌入式Linux是一種可以進行裁減、修改使之能在嵌入式計算機系統上運行的操作系統。具有較高的穩定性和安全性,以及具有良好的硬件支持、標準兼容性和資源豐富等特點Ilj。而MiniGUI是基于Linux實時嵌入式系統的一個輕量級圖形用戶界面支持系統,具有如下優點:節省資源,提供了完備的多窗口機制,可根據項目需求進行定制配置和編譯,獨立進程的GUI模擬器,不依賴任何操作系統及硬件平臺和可移植性好。
由于傳統的5點校準法在通過觸摸屏取點的操作過程中,只一次性取5個目標點,很容易因為手滑、沒看清楚等原因造成取點不準確,從而影響校準精度,故提出一種基于MiniGUI的觸摸屏多點采集校準算法,以較精確地校準觸摸屏。
1 觸摸屏多點采集校準
常用的5點校準法是先預設5個屏幕坐標點(原始點),通常5個點分別在左上、右上、右下、左下和屏幕正中,再通過觸摸屏獲取的5個目標坐標點(目標點)調用MiniGUI下特定函數對2組坐標數據進行處理,達到屏幕校準目的,校準函數為SetMouseCalibrationParameters。(觸摸屏取點時,預設的5個屏幕坐標點分別標記在屏幕上的“+”正中,每采集一個目標點,“+”變到下一個預設采點位置,并附帶操作文字提示),如圖l。
圖1觸摸屏取點
而多點采集校準是指在5個目標點的采點過程中,對每個點都多次采集、比較,使所采集的每個點更加準確,或使誤操作對采點結果的準確度影響較小。
2 多點采集校準算法及校屏程序
多點采集校準算法基本公式為:
式中,Pi為每一次取點的x坐標值;Pj為每一次取點的Y坐標值;為n次取點x坐標相加值;為n次取點Y坐標相加值;Px為x坐標最終值;Py為Y坐標最終值。
利用MiniGUI消息循環機制,編寫觸摸屏多點采集校屏程序。把MiniGUI消息機制中的鼠標消息,即用戶在操作鼠標時產生的鼠標事件,投遞到相應的應用程序消息隊列中。本程序采用鼠標消息中的MSG HITTEST,如果發生鼠標事件,系統會向含有光標熱點的窗口或捕捉鼠標的窗口發送一條消息。其wParam參數即為光標熱點的x坐標,IParam參數為光標熱點的y坐標。結合MSG TIMER消息,進行循環采集多點坐標。當用戶點擊觸摸屏某一“+”,則進入MSG TIMER消息計時采集數據點,開始采集即時接觸點對應光標的x、Y坐標點。在此期間,保持接觸點按下狀態則可一直獲取接觸點即時坐標,若取點完成之前松開,則會提示重新取點。在MSG TIMER時間周期內,本稃宇設置每一次按下鼠標期間都取十個坐標點,然后取相加值的平均數。這樣,可以保證取值更加準確。多點采集程序段流程如圖2。
圖2 多點采集屏幕校準程序流程圖
在程序初始化時,設置左上、右上、右下、左下、中心位置5個原始點相對于640×480大小屏幕的坐標分別為(10,10)、(630,10)、(630,470)、(10,470),(320.240),存入自定義結構數組dst中,程序段如下:
case MSG——CREATE:
dst[0],x=10;dst[0].y=10;
dst[l].x=630;dst[1].y=10;
dst[2].x=630;dst[2].y=470;
dst[3].x=lO;dst[3].Y=470;
dst[4].x=320;dst[4].Y=240;
取值完成后,把5個目標點坐標(£,只,)分別存入結構體src中。然后調用屏幕校準函數SetMouseCalibrationParameters(src,dst),即完成屏幕校準。最后,生成一個xp.txt文件,把最終目標點和原始點取值寫入該文件,程序如下:
fp=fopen(”./xp.txt”,”w+It);
if(fp==NULL)
exit(O);
fwrite(dst pts,sizeof(struct_POINT),5,fp);
fwrite(src pts,sizeof(struct—POINT),5,fp);
fclose(fp);
在下一次進入嵌入式計算機系統時,無需再進行屏幕校準操作。在系統總程序初始化時打開xp.txt文件,讀出其中保存的原始點與目標點值,再直接調用屏幕校準函數即可。程序如下:
fp=fopen(“xp.txt”,“rb”);
i“fp>0)
fread(dst,sizeof(POINT),5,fp);
fread(src,sizeof(POINT),5,fp);
SetMouseCalibrationParameters(src,dst);
fclose(fp);
3 結束語
結果證明,該方法可以較精確地校準觸摸屏,減小了取值過程中誤操作的可能,大大提高了取值的準確性。且界面程序中的人性化設計,使得校準操作更加方便有效。
參考文獻
【l】張斌.基于PXA270板開發Qt/Embedded的觸摸屏驅動【J】.兵工自動化,2009,28(9):82—84.
【2】劉錟.觸摸屏校準程序設計[J】.計算機世界.技術與應用.2006(13):25—27.
【3】張斌.Linux2.6.16在嵌入式模塊X—Board(GP8)上的移植(J】.兵工自動化,2009,28(10):94—96.