現在我們已經知道,ts_calibrate就是取了觸控螢幕5個點的座標,然後與對應的顯示屏的點座標聯立方程,求解得到7個校準引數。
直接上原始碼過程:
新建乙個類calibrate,類方法perform_calibration()實現上述求解7個校準引數的演算法,calibrate_main()將7個校準引數生成pointercal檔案。具體實現都是從tslib原始碼目錄下tests/ts_calibrate.c中copy出來的。
display display = this.getwindowmanager().getdefaultdisplay();
point outsize = new point();
// 通過display物件獲取螢幕寬、高資料並儲存到point物件中
display.getsize(outsize);
// 從point物件中獲取寬、高
ui_screen_width = 800;
ui_screen_height = 480;
但實際情況是,獲取出來的值一直對不上,本來是解析度800 * 480,獲取的結果一直是752 * 480,查過了什麼狀態列導航欄這些,但是我用的全屏顯示,沒這兩個啊。沒搞懂,先寫死吧。
根據上面取出來的ui_screen_width 、ui_screen_height,確定了顯示屏的左上角、右上角、右下角、左下角、中間的座標。並依此實現螢幕校準的引導頁面。
x=(x-xmin)*480/(xmax-xmin) ;
y=(y-ymin)*800/(ymax-ymin);
將公式逆推下,就可以從顯示屏的座標換算成觸控螢幕的點座標了
x1 = (int)(( event.getrawx() * 4095.0 ) / (float)ui_screen_width);//4095
y1 = (int)(( event.getrawy() * 4095.0 ) / (float)ui_screen_height);//usb touch x 0x7ff
就這,肯定得不出能用的7個校準引數啊 - -||
所以,後來我又在螢幕驅動裡新增了乙個calibration_flag,用來標誌是否進行校準:
if(calibration_flag == 1)
else
在進入螢幕校準程式後,就將這個標誌位寫0;完成校準後,將標誌位寫1。
這樣我的apk才算是大功告成。附一張成果圖:
wm螢幕校準
wince的cordll提供了螢幕校準的函式,使用方法與鉤子函式類似,強制載入dll,獲取位址,然後用函式指標呼叫。typedef bool winapi touchcalibrate hinstance hinstance loadlibrary t coredll.dll if hinstanc...
Ubuntu 螢幕顏色校準
大家都知道在windows裡面可以通過顯示卡驅動對螢幕顯示顏色進行調整,並且可以用系統自帶的顏色校準工具進行伽馬值調節。那麼問題來了,在ubuntu中要怎麼調節呢。經過在網上曲折的搜尋,暫時找到了兩種調節方案 一 使用ubuntu系統設定中的color功能對顏色進行調節,因為只有幾個系統預設的顏色方...
linux螢幕擴充套件 擴充套件螢幕的校準 螢幕翻轉等
xrandr命令為螢幕擴充套件 xinput命令為輸入裝置 設定dsi 1為hdmi 1的右擴充套件 xrandr output dsi 1 right of hdmi 1 auto dsi 1為觸控螢幕且為右擴充套件,對其進行校準 xinput map to output deviceid dev...