glenyang
驱动牛犊
驱动牛犊
  • 注册日期2004-07-14
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2194回复:7

WinCE下触摸屏坐标校准的问题,请教各位大侠

楼主#
更多 发布于:2004-07-14 16:15
在WinCE下遇到一个触摸屏坐标校准的问题,请教各位大侠:

我的情况是这样:我的触摸屏通过RS232由串口和CPU通信,对触摸屏我是不可控制的,当触摸触有摸屏事件时,我直接从串口获取原始坐标数据。在WinCE下,我在pdd的DdsiTouchPanelGetPoint()函数中把串口获取的数据返回给mdd,在该函数中,我使用了TouchSampleIsCalibratedFlag标志,自己对坐标进行了校准,校准如下;

触摸屏的分辨率为4096 x 4096,我通过对触摸屏四个点的坐标测定,得到:(左上角)显示屏的(0,0)对应于触摸屏的(310,3440),(右下角)显示屏的(3200,2400)对应于触摸屏的(3630,370),于是我用下面公式进行坐标校准计算:

X = (int) (3200 * (x-310)/(3630-310));
Y = (int) (2400 * ((3440-y)/(3440-370));

算出来的X,Y坐标就是返回给mdd的校准后的坐标。测试时,我发现有的坐标基本上可以校准(主要是左上角显示器坐标原点附近的点),有的坐标则有较大的偏差,而且偏差的方向和幅度也不一样,在屏幕上边,向上偏差一段距离,在屏幕中间和下边,向下偏差了一段距离.

请教各位大侠,出现这种情况是由于什么原因引起的?是不是我的校准方法不对啊?

万分感谢!

最新喜欢:

clevorclevor
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-14 19:14
看坐标的比例,在垂直方向为2400:3070,那么触摸屏每307个点对齐屏幕240个点,在每307的整数倍的点上时重新对齐,从这些点越往两边走差的越多,但用这个校准公式计算本身误差不会超过一个点阿...应该可以忍受的阿,你测出来的误差有多大?
还有一个点的校准坐标向上还是向下偏离,应该跟该点离坐标为307整数倍的点的距离有关,怎么会和在屏幕上还是下有关?
会不会跟显示屏幅度过大有关?

哈哈,我不是回答问题,我的疑问更多,哪个专家研究出来告知
根据地的兄弟们,团结就是力量
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-14 19:29
对了,我再问一句,你说的屏幕3200 X 2400是像素点还是屏幕光点?
根据地的兄弟们,团结就是力量
bjlg
驱动牛犊
驱动牛犊
  • 注册日期2002-08-05
  • 最后登录2010-03-11
  • 粉丝0
  • 关注0
  • 积分55分
  • 威望7点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-15 10:43
我实际做的时候与一楼的是一样的!
这个我就发现第一点与第五点与世纪的相差太多
其他的好像很接近的!

[编辑 -  7/15/04 by  bjlg]
glenyang
驱动牛犊
驱动牛犊
  • 注册日期2004-07-14
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-15 14:20
谢谢wxl_50685330兄!

3200 x 2400是我测出来的点,我是这样测的:在DdsiTouchPanelGetPoint()中,设置TouchSampleIsCalibratedFlag标志,然后使x=3200,y=2400,这样,我返回给mdd得坐标(3200,2400)就会被当作校准以后的点,也就是在显示屏上的显示的点的坐标,我这样设了以后,发现该点(3200,2400)刚好就是显示屏最右下脚的点,即显示屏坐标系中坐标值最大的点,而点(0,0)就刚好是显示屏最左上边的点,也就是显示屏坐标系的原点。我设置的显示分辨率为800x600,16位色的,因此,屏幕3200 X 2400既不是像素点也不是屏幕光点,是显示屏上的点(这样认为对吗?)。

目前,在屏幕左上角偏差很小,在左下角和有右上角偏差比左上角大,但也不是很大,而在其他地方(特别是中间)就偏差很大了。今天我测了一组数据,发现整个偏差呈" )( " 趋势( 上下左右四个方向都如此),因此,我觉得触摸屏上的点好像不是线性的,而实际显示的点则是线性的,而我的校准用的是线性方程,所以好像不对,那么,究竟该如何校准呢?

wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-15 15:31
    恩,我觉得触摸屏线性度肯定有影响,但是不应该差那么多啊。
    但是我觉得你算坐标应该用800x600这个像素分辨率来做,因为用户使用的最小点应该是像素点,比如和显示屏同样的水平长度上触摸屏有m个点,那么把它们均匀的对齐到800个屏幕点。
    3200x2400可能是屏幕光点数
根据地的兄弟们,团结就是力量
glenyang
驱动牛犊
驱动牛犊
  • 注册日期2004-07-14
  • 最后登录2004-07-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-07-15 16:06
开始的时候,我是用800x600来校准的:
X = (int) (800 * (x-310)/(3630-310));
Y = (int) (600 * ((3440-y)/(3440-370));
但在测试时,就不能触摸到显示器下面和右边的点。因为这样算出来的坐标的最大坐标也就是(800,600),而后来我测出来的显示屏的最大坐标是(3200,2400),因此,按800x600来做的话,其坐标值最大的点实际上也就在显示屏的中间,其他部分根本就覆盖不到,于是后来我就按照3200x2400来计算了。这个地方我也很糊涂,没搞明白,用3200x2400来做,我也找不到理论依据,但这样做比800x600要准一些。

现在我在想,我的偏差可能是由于触摸屏的坐标是非线性的引起的。今天我测了一下,用笔沿着直线在屏上触摸,但从串口获得的原始坐标值却不是线性的,呈 )( 趋势(我在上下左右四边测过,基本上都是这种趋势),这样的话,该如何校准呢?是所有的触摸屏都这样,还是只有我这个触摸屏是这样啊?


wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-07-15 16:29
...可能我们两说的不是一回事,我是根据你的话理解的。
你不是想得到用户屏幕的点的坐标?我理解的是当用户触摸触摸屏的一点时,你需要将这点在在显示屏屏幕区域的坐标返回给应用程序,那么屏幕上横向纵向最多就是800x600啊。不过看你返回的东西肯定不是屏幕像素坐标了阿。你是想返回触摸屏点相对于屏幕原点的触摸屏坐标?那这样的话直接x-310就可以了阿...
触摸屏的线性度应该可以忍受的吧,原来我用的那个就挺好,但我没注意线性度怎么样,要不你换一快试试?
根据地的兄弟们,团结就是力量
游客

返回顶部