一种电子白板的书写方法及装置与流程

文档序号:13177314阅读:204来源:国知局
技术领域本发明涉及电子白板技术领域,特别是指一种电子白板的书写方法及装置。

背景技术:
电子白板,例如交互式电子白板,具备书写、批注、绘画、多媒体娱乐、网络会议等功能,融入了人机交互、平板显示、多媒体信息处理和网络传输等多项技术,是信息化时代中办公、教学、图文互动演示的优选产品。目前,电子白板一般都具有一个大屏幕的交互式平板(例如为70英寸),电子白板的操作系统用于进行捕捉触点事件、绘制线条等操作。目前的电子白板在使用中,发现有书写体验差的问题,主要表现在书写速度慢,书写轨迹有较大偏差等,极大影响了用户的使用感受度。

技术实现要素:
有鉴于此,本发明的目的在于提出一种电子白板的书写方法及装置,能够直接从触摸屏设备文件中得到点击的事件,直接调用底层的帧缓存接口进行写屏操作。基于上述目的本发明提供一种电子白板的书写方法,包括:获取与电子白板的触摸屏相对应的触摸屏设备文件;读取所述触摸屏设备文件,从所述触摸屏设备文件中获取触摸事件数据;根据所述触摸事件数据计算在所述触摸屏上显示的轨迹数据;调用帧缓冲区接口,基于所述轨迹数据在所述触摸屏上绘制移动轨迹。根据本发明的一个实施例,进一步的,启动触摸数据获取线程,所述触摸数据读取所述触摸屏设备文件,从所述触摸屏设备文件中获取触摸事件数据,并根据所述触摸事件数据计算在所述触摸屏上显示的轨迹数据;启动轨迹绘制线程,所述轨迹绘制线程调用帧缓冲区接口,基于所述轨迹数据在所述触摸屏上绘制移动轨迹。根据本发明的一个实施例,进一步的,所述获取与电子白板的触摸屏相对应的触摸屏设备文件包括:打开系统中存储设备文件的目录,遍历此目录下所有的设备文件;依次打开设备文件,得到此设备文件的句柄并获取此设备文件的设备名称;判断此设备文件的设备名称是否与所述触摸屏设备的设备名称一致,如果是,则此设备文件为所述触摸屏设备文件,保存所述触摸屏设备文件的句柄。根据本发明的一个实施例,进一步的,所述读取所述触摸屏设备文件、从所述触摸屏设备文件中获取触摸事件数据包括:周期性地读取所述触摸屏设备文件,获取所述触摸屏设备文件中的事件数据;其中,在所述触摸屏上操作的事件数据被存储在所述触摸屏设备文件中;解析所述事件数据,并将所述事件数据封装为所述触摸屏上的移动轨迹的坐标数据。根据本发明的一个实施例,进一步的,所述解析所述事件数据、并将所述事件数据封装为在所述触摸屏上移动的轨迹的坐标数据包括:解析所述事件数据获取事件参数,所述事件参数包括:事件ID、操作类型、X坐标采样值、Y坐标采样值;将所述事件参数转换为移动轨迹的坐标数据,所述坐标数据包括:轨迹ID、触摸屏x坐标、触摸屏y坐标和当前操作状态;所述当前操作状态包括:上、下、移动;其中,当触摸屏的分辨率为在X轴方向上为W像素、在Y轴方向上为H像素时:XL=XT-XtminXtmax-Xtmin×W;]]>XL为触摸屏X标,XT为X坐标采样值,Xtmin、Xtmax、分别是触摸屏的X、Y轴方向上的坐标最小值和坐标最大值;YL=YT-YtminYtmax-Ytmin×H;]]>YL为触摸屏Y坐标,YT是Y坐标采样值,Ytmin、Ytmax分别是触摸屏的Y轴方向上的坐标最小值和坐标最大值。根据本发明的一个实施例,进一步的,所述调用帧缓冲区接口、基于所述轨迹数据在所述触摸屏上绘制移动轨迹包括:基于触摸屏的像素设置绘图区域,在内存中创建与所述绘图区域相映射图文件对象;基于所述坐标数据在所述图文件对象中加入在所述触摸屏上绘制的移动轨迹数据;打开一个可用的帧缓冲设备,获取取得当前的所述触摸屏的参数,所述触摸屏的参数包括:屏幕分辨率、每个像素点的比特数;将所述帧缓冲设备的内存映射到内核进程空间;将所述图文件对象的数据写入所述帧缓冲设备的内存,通过所述帧缓冲设备在所述触摸屏上相应的位置绘制并显示移动轨迹。基于上述目的本发明提供一种电子白板的书写装置,包括:设备文件获取单元,用于获取与电子白板的触摸屏相对应的触摸屏设备文件;轨迹数据计算单元,用于读取所述触摸屏设备文件,从所述触摸屏设备文件中获取触摸事件数据;根据所述触摸事件数据计算在所述触摸屏上显示的轨迹数据;轨迹绘制单元,用于调用帧缓冲区接口,基于所述轨迹数据在所述触摸屏上绘制移动轨迹。根据本发明的一个实施例,进一步的,所述轨迹数据计算单元,用于启动触摸数据获取线程;其中,所述触摸数据读取所述触摸屏设备文件,从所述触摸屏设备文件中获取触摸事件数据,并根据所述触摸事件数据计算在所述触摸屏上显示的轨迹数据;所述轨迹绘制单元,用于启动轨迹绘制线程;其中,所述轨迹绘制线程调用帧缓冲区接口,基于所述轨迹数据在所述触摸屏上绘制移动轨迹。根据本发明的一个实施例,进一步的,所述设备文件获取单元,还用于打开系统中存储设备文件的目录,遍历此目录下所有的设备文件;依次打开设备文件,得到此设备文件的句柄并获取此设备文件的设备名称;判断此设备文件的设备名称是否与所述触摸屏设备的设备名称一致,如果是,则此设备文件为所述触摸屏设备文件,保存所述触摸屏设备文件的句柄。根据本发明的一个实施例,进一步的,所述轨迹数据计算单元,包括:事件获取子模块,用于周期性地读取所述触摸屏设备文件,获取所述触摸屏设备文件中的事件数据;其中,在所述触摸屏上操作的事件数据被存储在所述触摸屏设备文件中;坐标计算子模块,用于解析所述事件数据,并将所述事件数据封装为所述触摸屏上的移动轨迹的坐标数据。根据本发明的一个实施例,进一步的,所述坐标计算单元,还用于解析所述事件数据获取事件参数,所述事件参数包括:事件ID、操作类型、X坐标采样值、Y坐标采样值;将所述事件参数转换为移动轨迹的坐标数据,所述坐标数据包括:轨迹ID、触摸屏x坐标、触摸屏y坐标和当前操作状态;所述当前操作状态包括:上、下、移动;其中,当触摸屏的分辨率为在X轴方向上为W像素、在Y轴方向上为H像素时:XL=XT-XtminXtmax-Xtmin×W;]]>XL为触摸屏X标,XT为X坐标采样值,Xtmin、Xtmax、分别是触摸屏的X、Y轴方向上的坐标最小值和坐标最大值;YL=YT-YtminYtmax-Ytmin×H;]]>YL为触摸屏Y坐标,YT是Y坐标采样值,Ytmin、Ytmax分别是触摸屏的Y轴方向上的坐标最小值和坐标最大值。根据本发明的一个实施例,进一步的,所述轨迹绘制单元,包括:图文件创建子模块,用于基于触摸屏的像素设置绘图区域,在内存中创建与所述绘图区域相映射图文件对象;运行轨迹生成子模块,用于基于所述坐标数据在所述图文件对象中加入在所述触摸屏上绘制的移动轨迹数据;帧缓冲设备调用子模块,用于打开一个可用的帧缓冲设备,获取取得当前的所述触摸屏的参数,所述触摸屏的参数包括:屏幕分辨率、每个像素点的比特数;将所述帧缓冲设备的内存映射到内核进程空间;将所述图文件对象的数据写入所述帧缓冲设备的内存,通过所述帧缓冲设备在所述触摸屏上相应的位置绘制并显示移动轨迹。从上面所述可以看出,本发明的电子白板的书写方法及装置,能够直接从触摸屏设备文件中得到点击的事件,直接调用底层的帧缓存接口进行写屏操作,并将获取触摸事件和写屏操作分别放在2个线程完成的,提高了运行效率并提升书写速度,解决了书写轨迹偏差的问题,并明显提升了显示数据的速度。附图说明图1为本发明的电子白板的书写方法的一个实施例的流程图;图2为Android系统架构图;图3本发明的电子白板的书写方法的并行处理示意图;图4为AndroidGUI系统架构图;图5为AndroidGUI的总体结构图;图6为本发明的电子白板的书写装置的一个实施例的示意图。具体实施方式为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。图1为本发明的电子白板的书写方法的一个实施例的流程图,如图1所示:步骤101,获取与电子白板的触摸屏相对应的触摸屏设备文件。步骤102,读取触摸屏设备文件,从触摸屏设备文件中获取触摸事件数据。步骤103,根据触摸事件数据计算在触摸屏上显示的轨迹数据。步骤104,调用帧缓冲区接口,基于轨迹数据在触摸屏上绘制移动轨迹。上述实施利中的电子白板的书写方法,能够较好地解决了书写速度的问题,而且能够解决了书写轨迹偏差的问题。目前,电子白板可以基于多种操作系统,例如linux、android等。以android框架实现为例,android系统架构如图2所示。采用这种Android系统架构,经过测试发现,从触摸屏touchpanel驱动发出某个点的采样值到上层应用程序取得点坐标,大约需要15ms到18ms。在目前的电子白板的android系统架构中,取触摸事件和屏幕绘图刷新都是在一个主线程完成的,这种架构必须串行完成所有工作,处理效率低下,造成书写速度缓慢。在一个实施例中,将串行处理改为并行处理,提升效率,如下图3所示,启动触摸数据获取线程,触摸数据读取触摸屏设备文件,从触摸屏设备文件中获取触摸事件数据,并根据触摸事件数据计算在触摸屏上显示的轨迹数据;启动轨迹绘制线程,轨迹绘制线程调用帧缓冲区接口,基于轨迹数据在触摸屏上绘制移动轨迹。将获取触摸事件的功能和显示的功能分别由2个线程分别完成,能够提高电子白板的书写速度。在现有的android系统架构中,触摸事件处理层次如下表1所示,从一个触摸事件产生到应用程序收到此点的事件,中间需要经过很多步骤,这个过程就是导致延时15ms到18ms的原因。表1-触摸事件处理层次表在一个实施例中,直接从触摸屏驱动touchpaneldriver得到点击的事件。在android系统中,所有的设备都是被抽象为文件,可以通过jni的方式用C语言写一个直接读取触摸屏TouchPanel输入设备事件的程序,来从底层直接取触摸事件并按照相应的协议转换后将事件直接分发给上层应用使用。在android系统中,普通应用程序是无法直接读取触摸屏TouchPanel抽象设备文件,需要首先将应用程序加system权限并在Android源码中编译,然后在程序中获得root权限,然后再遍历/dev/input目录,得到所有的设备文件,并使用chmod命令修改权限为666(只读),再读取此设备的名称,找到对应的TouchPanel设备再读取事件。具体为:1.获得root权限。2.遍历/dev/input目录,得到每个设备号。3.使用chmod将此设备权限修改为666。4.使用open方式以只读方式打开此设备。5.使用ioctl得到此设备的名称,判断是否是TouchPanel设备。6.找到对应的TouchPanel设备,返回设备文件号。7.循环读取设备事件,得到事件结构体。8.按照多点触控协议解析得到的事件。9.在应用程序的AndroidManifest.xml中加入android:sharedUserId=\android.uid.system\属性,以提升应用程序权限。10.将应用程序在Android源码中编译得到相应的APK文件。从触摸屏TouchPanel设备文件中读取的数据是触摸屏采用数据,不是LCD坐标值,需要采用类似于屏幕校正算法的方式先转换为LCD坐标才能提供给应用上层使用。在一个实施例中,打开系统中存储设备文件的目录,此目录可以根据电子白板支持不同的操作系统而不同,例如,android系统为/dev/input目录。遍历此目录下所有的设备文件,依次打开设备文件,得到此设备文件的句柄并获取此设备文件的设备名称。判断此设备文件的设备名称是否与触摸屏设备的设备名称一致,如果是,则此设备文件为触摸屏设备文件,保存触摸屏设备文件的句柄。根据电子白板支持不同的操作系统,可以使用不同的系统提供的函数执行上述功能,也可以开发专门的函数。例如,在android系统中,循环读取设备文件,得到事件结构体具体为:得到触摸屏TouchPanel设备文件句柄。具体步骤如下:a.使用opendir函数打开/dev/input目录,得到目录句柄。b.使用readdir函数遍历读取此目录下所有设备文件。c.使用open函数打开设备文件,得到文件句柄。d.使用ioctl函数得到此设备文件的设备名称。e.使用strcmp函数比较此设备文件的设备名称和电子白板使用的触摸屏TouchPanel设备名称是否一致,如果一致,保存此设备文件句柄,并跳出遍历循环,否则继续遍历。循环读取设备文件、得到事件结构体实现的部分代码如下:使用read函数循环读取刚才保存的设备文件,第二个参数event返回的就是时间结构体。在一个设备中,周期性地、循环读取触摸屏设备文件,获取触摸屏设备文件中的事件数据。在触摸屏上操作的事件数据被存储在触摸屏设备文件中。解析事件数据,并将事件数据封装为触摸屏上的移动轨迹的坐标数据。例如,在android系统中,按照多点触控协议解析得到的事件,并封装数据的例子如下:用户在触摸屏幕上点击一下后硬件产生一个中断,OnClickListener收到这个事件,往/dev/input/event*写入一个相应的事件数据,android循环读取/dev/input/event*的事件,再分发给WindowManagerServer,最后再发到相应的ViewGroup和View。可以通过直接读取/dev/input/event*事件数据的方式,来达到快速处理的目的。读取/dev/input/event*中的事件数据,如下所示:/dev/input/event4:000300390000000d/dev/input/event4:0003003500006e25/dev/input/event4:0003003600002ecb/dev/input/event4:0000000200000000/dev/input/event4:0003003900000002/dev/input/event4:0003003500006ea4/dev/input/event4:00030036000028c2/dev/input/event4:0000000200000000/dev/input/event4:0000000000000000/dev/input/event4:000300390000000d第一列数据/dev/input/event4:表示TouchPanel设备文件是event4。第二列数据:0003表示这是一个TouchPanel点击事件,0000表示这是一个同步信号,意思就是事件结束,可以解析并且分发出去了。第三列数据:0039表示第四列数据是哪个点触摸事件发生了,0035表示第四列数据是X坐标采样值,0036表示第四列数据是Y坐标采样值。0000000200000000、0000000000000000表示此点抬起了,如果再跟着有0000000200000000、0000000000000000表示所有点都抬起了。根据对event读取数据的分析,封装数据格式,例如定义如下类:publicclassMyEvent{privateint[]id=null;//保存点的需要,对应上述第四列数据privatefloat[]x=null;//保存转换过的LCDx坐标privatefloat[]y=null;//保存转换过的LCDy坐标privateint[]status=null;//保存当前的状态:down、move、up
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1