zoukankan      html  css  js  c++  java
  • 【原创】wince 5.0/wince6.0 2440/6410/S5PV210 触摸屏驱动 滤波函数的介绍(作者:gooogleman)

           

      作者:gooogleman     邮箱:gooogleman@foxmail.com

    以前曾经遇到过wince 手持机,POS机触摸屏 抖动,跳点,飞点的问题,其中起作用最大的就是触摸屏滤波函数,现在给大家介绍一下。

    //-----------------------------------------------------------------------------

    //--函数介绍:触摸屏滤波函数,每次输入一个采集到的触摸屏点(x/y),然后进行滤波

    //------------------------------------------------------------------------------
    static BOOL
    Touch_Pen_Filtering(INT *px, INT *py)
    {
        BOOL RetVal = TRUE;
        // TRUE  : Valid pen sample
        // FALSE : Invalid pen sample
        INT Filter_Margin;
        static int count = 0; // 用来记录 存储点数,对static INT x[2], y[2];很有帮助,详情看函数。
        static INT x[2], y[2];// 用数组来存储 采集数的两个点x[0],y[0]存储的是第一个点,x[1],y[1]存储的是(第二个点)

        INT TmpX, TmpY;    // 用来暂存点
        INT dx, dy;             // 点差值变量

        if(*px <0 && *py <0) // 如果点的值小于0 ,那么就是无效点,函数返回FALSE
        {
            count = 0;
            return FALSE;
        }
        else                        // 点有效,count 值加1
        {
            count++;
        }

        if (count > 2) // 当采集的点大于或者等于3 个的时候(count=0/1/2 )
        {
            // apply filtering rule
            count = 2;// 重新 赋值2

            // average between x,y[0] and *px,y  第一个点和当前点的平均值
            TmpX = (x[0] + *px)>>1;
            TmpY = (y[0] + *py)>>1;

            // difference between x,y[1] and TmpX,Y  求出第二个点和第一个点和当前点的均值差值绝对值,
            dx = (x[1] > TmpX) ? (x[1] - TmpX) : (TmpX - x[1]);
            dy = (y[1] > TmpY) ? (y[1] - TmpY) : (TmpY - y[1]);

            Filter_Margin = (x[1] > x[0]) ? (x[1]-x[0]) : (x[0]-x[1]);
            Filter_Margin += (y[1] > y[0]) ? (y[1]-y[0]) : (y[0]-y[1]);
            Filter_Margin += TSP_FILTER_LIMIT;

            if ((dx > Filter_Margin) || (dy > Filter_Margin)) {  //  无效 返回重新采集点
          // Invalid pen sample
                *px = x[1]; // 这个应该没有关系的
            *py = y[1]; // previous valid sample
                RetVal = FALSE;
                count = 0;
            }
            else   // 点有效,更新x[0] = x[1]; y[0] = y[1]; 存储的值
       {
                // Valid pen sample
                x[0] = x[1]; y[0] = y[1];
                x[1] = *px; y[1] = *py; // reserve pen samples

                RetVal = TRUE;
            }
        }
        else // (count < 2) // 采集点不够多,更新x[0] = x[1]; y[0] = y[1]; 存储的值,继续采集下面的值,至少采集三个点才行
       { // till 2 samples, no filtering rule
            x[0] = x[1]; y[0] = y[1];
            x[1] = *px; y[1] = *py; // reserve pen samples

            RetVal = FALSE;    // 

        }

        return RetVal;

    }

  • 相关阅读:
    Centos7 安装zabbix3.0 服务端 详细
    kubernetes 创建nginx 容器
    kubernetes 创建tomcat 容器
    kubernetes创建yaml,pod服务一直处于 ContainerCreating状态的原因查找与解决
    SpringMVC,SpringBoot利用ajax上传文件到后台
    SpringMVC,SpringBoot使用ajax传递对象集合/数组到后台
    IDEA修改显示星号*和热部署
    IDEA上的项目托管到码云步骤
    java代码块,静态代码块,静态变量,构造方法执行顺序
    java 动态绑定 多态
  • 原文地址:https://www.cnblogs.com/gooogleman/p/2550749.html
Copyright © 2011-2022 走看看