基于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.