📄 touch.c
字号:
typedef struct Matrix {
/* This arrangement of values facilitates
* calculations within getDisplayPoint()
*/
WORD An, /* A = An/Divider */
Bn, /* B = Bn/Divider */
Cn, /* C = Cn/Divider */
Dn, /* D = Dn/Divider */
En, /* E = En/Divider */
Fn, /* F = Fn/Divider */
Divider ;
} MATRIX ;
typedef struct TPoint {
WORD x,
y ;
} TPOINT ;
/* An array of perfect input screen points used to obtain a first pass */
/* calibration matrix good enough to collect calibration samples. */
TPOINT perfectScreenSample[3] = {
{ 824, 1093 },
{ 3253, 2059 },
{ 2039, 3026 }
} ;
/* An array of perfect display points used to obtain a first pass */
/* calibration matrix good enough to collect calibration samples. */
TPOINT perfectDisplaySample[3] = {
{ 100, 100 },
{ 700, 300 },
{ 400, 500 }
} ;
#ifndef OK
#define OK 0
#define NOT_OK -1
#endif
MATRIX GMatrix ;
TPOINT GScreen ;
/*
#define REFERENCEX 0x07B0
#define LEFT_X 0x01A4
#define RIGHT_X 0x0E4A
#define REFERENCEY 0x0820
#define UP_Y 0x0262
#define DOWN_Y 0x0DB6
float Touch_KX=3.16,Touch_KY=4.36;
*/
BYTE Volume_Contiue = 0;
extern BYTE g_bLeft_Right;
extern BYTE g_bXpgStatus;
int setCalibrationMatrix( TPOINT * displayPtr,
TPOINT * screenPtr,
MATRIX * matrixPtr)
{
int retValue = OK ;
matrixPtr->Divider = ((screenPtr[0].x - screenPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) -
((screenPtr[1].x - screenPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
if( matrixPtr->Divider == 0 )
{
retValue = NOT_OK ;
}
else
{
matrixPtr->An = ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) -
((displayPtr[1].x - displayPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
matrixPtr->Bn = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].x - displayPtr[2].x)) -
((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].x - screenPtr[2].x)) ;
matrixPtr->Cn = (screenPtr[2].x * displayPtr[1].x - screenPtr[1].x * displayPtr[2].x) * screenPtr[0].y +
(screenPtr[0].x * displayPtr[2].x - screenPtr[2].x * displayPtr[0].x) * screenPtr[1].y +
(screenPtr[1].x * displayPtr[0].x - screenPtr[0].x * displayPtr[1].x) * screenPtr[2].y ;
matrixPtr->Dn = ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].y - screenPtr[2].y)) -
((displayPtr[1].y - displayPtr[2].y) * (screenPtr[0].y - screenPtr[2].y)) ;
matrixPtr->En = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].y - displayPtr[2].y)) -
((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].x - screenPtr[2].x)) ;
matrixPtr->Fn = (screenPtr[2].x * displayPtr[1].y - screenPtr[1].x * displayPtr[2].y) * screenPtr[0].y +
(screenPtr[0].x * displayPtr[2].y - screenPtr[2].x * displayPtr[0].y) * screenPtr[1].y +
(screenPtr[1].x * displayPtr[0].y - screenPtr[0].x * displayPtr[1].y) * screenPtr[2].y ;
}
return( retValue ) ;
} /* end of setCalibrationMatrix() */
int getDisplayPoint( TPOINT * displayPtr,
TPOINT * screenPtr,
MATRIX * matrixPtr )
{
int retValue = OK ;
if( matrixPtr->Divider != 0 )
{
/* Operation order is important since we are doing integer */
/* math. Make sure you add all terms together before */
/* dividing, so that the remainder is not rounded off */
/* prematurely. */
displayPtr->x = ( (matrixPtr->An * screenPtr->x) +
(matrixPtr->Bn * screenPtr->y) +
matrixPtr->Cn
) / matrixPtr->Divider ;
displayPtr->y = ( (matrixPtr->Dn * screenPtr->x) +
(matrixPtr->En * screenPtr->y) +
matrixPtr->Fn
) / matrixPtr->Divider ;
}
else
{
retValue = NOT_OK ;
}
return( retValue ) ;
} /* end of getDisplayPoint() */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -